コマンドを実行し、すべてをbashの変数に保存します。

コマンドを実行し、すべてをbashの変数に保存します。

私が開発しているbashスクリプトでコマンドを実行し、変数をキャプチャしようとしています。

  • 標準出力
  • 標準エラー
  • ステータスコード

この目標を達成する方法は?順序はですtar

私は最も標準的なアプローチを試しました。

TAROUTPUT=$(tar -cf arch.tar /path/to/dir)

tar私が行ったいくつかのタスクによると(実際に失敗を生成するわけではありません)標準出力これから、stderrは変数に保存されていないようです。完全な解決策はTAROUTPUT(stdoutとstderrを使用)とTARSTATUS変数です。

よろしくお願いします。

答え1

TAROUTPUT=$(tar -cf arch.tar /path/to/dir 2>&1)
this_is_the_tar_exit_code=$?

答え2

stdout分離したい場合stderr

craft@engine:~$ tar -cf arch.tar /path/to/dir 1>/tmp/tar_stdout 2>/tmp/tar_stderr; RETCODE=$( echo ${?} );
craft@engine:~$ stdout_var=$( cat /tmp/tar_stdout )
craft@engine:~$ stderr_var=$( cat /tmp/tar_stderr )
craft@engine:~$ echo -e "STDOUT : ${stdout_var}\nSTDERR : ${stderr_var}\nCommand Status: ${RETCODE}"
  • 1> /tmp/tar_stdout:stdout出力を一時ファイルに保存します。
  • 2> /tmp/tar_stderr:stderr出力をファイルに保存します。
  • コマンドの戻りコード(終了状態)は${?}変数に格納されます。

関連情報