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。
これが追加の視点を提供することを願っています。