bashコマンドを置き換えずに出力文字列を実行するには?
たとえば、Terminalと入力してもtshark
プログラムがまだインストールされていない場合は、次のエラーメッセージが表示されます。
_some text_
sudo apt-get install tshark
それでは、コピー貼り付けやコピーなしで最後の行を実行したいと思います。
試してみると
$ tshark 2> >(tail -1)
sudo apt-get install tshark
実行したい最後の行を取得します。
この文字列を実行するには、bashのコマンドの置き換えと同様に機能し、すべてを正しくインストールします。
$ $(tshark 2> >(tail -1))
しかし、bashのコマンド置換を使用せずにxargsにパイプする場合
$ tshark 2> >(tail -1) | xargs
sudo apt-get install tshark
xargsへのパイピングがなぜ効果がないのか疑問に思います。
しかし、私が試してみると
$ tshark 2> >(tail -1) | xargs xargs
sudo
パスワードが正しいかどうかを尋ねられ、インストールapt-get
後に中断されます。
パイプすると同じ結果が得られますbash
。
どんな答えやアドバイスでも大歓迎です。
答え1
回答
コマンドを再実行して出力を直接キャプチャしないと、明示的にキャプチャされていないコマンド(パイプなど)の出力を再利用できません。
Bashはコマンドを保存しません出力コマンド終了コードとコマンド履歴を保存する方法とは異なります。あなたの端末出力があり、bashは独自にコピーを保持しません。
したがって、命令の置換を完全に避けたい場合は、ここではそこに行くことができないと結論付けます。
オプション
本当の質問は「どうすればいいの?簡単にターミナルから上の行に表示されている出力を取得し、多くの入力を行わずにコマンドプロンプトにコマンドとして入力しますか? 「いくつかの方法でこの問題を解決できます。
- ホットキーを使用すると、
readline
編集コマンドを簡単に作成できます。
たとえば、他の場所での@chorobaの良いアドバイスに対するあなたの反応は、最後のコマンドを編集するにはあまりにも多くの入力が必要であるということです。 readlineショートカットを使用すると、最後のコマンド(右のwaaaayの代わりに使用して到達)をすばやく編集CTRL-aできます。CTRL-eCTRL-pUP
screen
またはなどの端末マルチプレクサを使用してくださいtmux
。私は好むtumx
。コピーして貼り付けるのはとても簡単です。CTRL-a CTRL-[コピーモードに簡単に切り替えて、いくつかのVIキーを使用して目的の行を次のプロンプトにコピーできます(先行キーを使用してtmux
設定)CTRL-a。
これが追加の視点を提供することを願っています。
答え2
xargs
標準入力から読み取った引数を使用して指定したコマンドを実行します。コマンドが指定されていない場合echo
。
を使用すると、xargs xargs
最初のxargsがコマンドを読み取り実行されます。
xargs sudo apt-get install tshark
ただし、標準入力がなくなったため、パラメータは追加されません。ただし、標準入力がないため、インタラクティブな質問に対する回答はありません。これで、使い果たされたパイプに接続されている標準入力から読み取られます。を使用してapt-getを実行してみることができます--yes
。 (パスワードを求めるメッセージはパスワードと同じように機能します。いいえセキュリティ上の理由から、標準入力から読み出します。