2016-04-29 21 views
0

It's possible edit a command in standard editorコマンド出力を編集して実行するには?

しかし、コマンドのOUTPUTを編集してコマンドラインで実行する方法が見つかりませんでした。 例では、私が入力した場合:

リメイク

私が取得:

エルPROGRAMAの«リメイク»ノーエスタinstalado。 Puede instalarlo escribiendo: sudoの私が好きなリメイク

デ最初の行を削除し、2つ目の実行インストールapt-getを。

出力はstoutではなくstronrであるため、これは特別なケースです。

しかし、他の場合には、出力を編集し、コマンドを追加して実行すると便利です。

+0

非常によく似た質問があります。 しかし、私は一般的な答えのようです。 多くの方々に感謝します。 – Wallebot

+0

Vimへの可能な送信出力。例 'ls | vim -' しかし、このトリックのようにvimの中でテキストを実行するにはhttps://stackoverflow.com/questions/22655587/how-to-use-vi-to-edit-a-command-in-terminal -on-linux?s = 1%7C2.8474 – Wallebot

+0

答えが、エレガントかどうかはわかりません。例:ls | vipe | eval 'more'。 vimの中で編集する。例としてcat text.txtと:wq 動作しますが、vipeをインストールする必要がありますが、このctrl-x ctrl-eが動作する前に動作しています。私はインストールvipeなしでソリューションを終了する必要があると思う。 – Wallebot

答えて

0

grepを使用できます。

私はこのようにそれを行うだろう:

remake 2>&1 >/dev/null | grep -v -l -i "El programa «remake» no está in stalado." 

それとも、この:

remake 2>&1 >/dev/null | grep -l -i "Puede instalarlo escribiendo: sudo apt-get install remake" 

|パイプの場合、コマンド出力をgrep(出力をフィルタリングする)に送り、stdoutを出力します。

この場合、stderr(2)の入力を標準出力(& 1)に/dev/nullにリダイレクトし、grepでフィルタリングします。

+0

ありがとうございました。 私のために働かないでください。 しかし、私はそれを修正しました。 'eval $(remake 2>/dev/stdout | grep" sudo ")' しかし、私は汎用的な解決策が必要です。出力をキャプチャし、手動で編集し、実行します。 – Wallebot

+0

これは結果を実行しないことに注意してください。 –

+0

それを修正しました、私の悪い、私はstderrを忘れました。 – ShellRox

0

出力が得られたら、それは遅すぎます。出力はどこにも保存されません。あなたは、コマンドがエラーを発行することがわかっている 場合は、行うことができます:エラー出力の2行目を実行します

`remake 2>&1 | sed -n '2 p'` 

を(つまり、須藤はapt-getはリメイクをインストールします)。

説明:

remake 
2>&1 : redirects stderr to stdout 
| sed -n '2 p' : only print the second line 
backquotes (``) : executes the command 

しかし、それはあなたがあなたのプログラムがインストールされていない知っていることなので、より良い直接書き込む:

sudo apt-get install remake 

を、私はむしろそれをインストールし、インストールされていない」プログラムを傍受しようとします"動作するので、"それをインストールする[y/n] "と尋ねる。

&コマンドを貼り付けるだけで、コマンド部分(sudo apt-get install ...)をマウスで選択し、右または中央のボタンをクリックしてコピーすることができます使用する端末エミュレータによって異なります)。

+0

私はgpmをインストールして試してみる。ありがとうpierre。 リメイクはほんの一例です。 すべての出力のためのソリューションのようなID。出力にはコマンドがなく、例としてviに追加されています。 – Wallebot

0

あなたのコメントを見ると、回答はあなたの出力で何をしたいかによって決まります。

まず、出力を保存する必要があります。そして、あなたは

editrun my shell command with arguments 
を呼び出すことができます

関数として保存することができ
TMPFILE=`mktemp` 
my-command > $TMPFILE 
vi $TMPFILE 
// do whatever you want with $TMPFILE : 
// source $TMPFILE // to execute it 

function editrun() { 
    TMPFILE=`mktemp` 
    "[email protected]" > $TMPFILE 2>&1 # run the command, redirects stdout to $TMPFILE, and also stderr 
    vi $TMPFILE 
    source $TMPFILE 
} 

:広範囲に

、あなたはviの中で開いて一時ファイルに保存することができます

例:

editrun echo ls -al 

コマンドラインを取得して実行するには、 "$ @"を使用しました。これはほぼすべての状況で機能するはずです。しかし、いくつかの特別なbash変数を使って、完全なbashコマンドラインを得ることは可能でなければなりません。

関連する問題