1. ホーム
  2. linux

[解決済み] Bashで最後のコマンドの出力を自動的に変数に取り込むには?

2022-05-11 10:13:35

質問

最後に実行したコマンドの結果を、後続のコマンドで使用できるようにしたい。たとえば

$ find . -name foo.txt
./home/user/some/directory/foo.txt

さて、このファイルをエディタで開いたり、削除したり、何か他のことができるようにしたいとしましょう、例えば。

mv <some-variable-that-contains-the-result> /some/new/location

どうすればいいのでしょうか?多分、いくつかのbashの変数を使用して?

更新しました。

明確にするために、私は手動で物事を割り当てたくはないのです。私が求めているのは、組み込みの bash 変数のようなもので、たとえば、次のようなものです。

ls /tmp
cd $_

$_ は、前のコマンドの最後の引数を保持します。私は似たようなものが欲しいのですが、最後のコマンドの出力があります。

最終更新です。

Sethの回答は非常にうまくいきました。心に留めておくべきことがいくつかあります。

  • を忘れないでください。 touch /tmp/x を使用している場合は
  • 最後のコマンドの終了コードが成功した場合のみ、結果が保存されます。

どのように解決するのですか?

これは本当にやっつけ仕事のような解決策ですが、ほとんどの場合、うまくいくようです。 テスト中に、私はそれが時々 ^C をコマンドラインで受け取ったときに、うまく動作しないことがあることに気づきました。

このハックは対話型モードのみのハックで、誰にも勧められないという自信があります。 バックグラウンド コマンドは、通常よりもさらに定義されていない動作を引き起こす可能性があります。 他の回答は、プログラム的に結果を得るためのより良い方法です。


とはいえ、以下は "解決策"です。

PROMPT_COMMAND='LAST="`cat /tmp/x`"; exec >/dev/tty; exec > >(tee /tmp/x)'

このbash環境変数を設定して、好きなようにコマンドを発行します。 $LAST を実行すると、大抵の場合、求めている出力が得られます。

startide seth> fortune
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve
startide seth> echo "$LAST"
Courtship to marriage, as a very witty prologue to a very dull play.
                -- William Congreve