web-dev-qa-db-ja.com

コマンドを実行し、すべてをbashの変数に格納します

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

  • stdout
  • stderr
  • ステータスコード

それを達成する方法?意味がある場合、コマンドはtarです。

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

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

私が行ったいくつかの作業に基づいて(実際にtarエラーを生成していません)stdoutのみを取得します。stderrは変数に格納されません。完璧なソリューションには、TAROUTPUT(stdout&stderrの両方を含む)およびTARSTATUS変数があります。

前もって感謝します。

4
TAROUTPUT=$(tar -cf Arch.tar /path/to/dir 2>&1)
this_is_the_tar_exit_code=$?
3
Hauke Laging

stdoutstderrから分離する場合:

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出力をファイルに保存します。
  • コマンドの戻りコード(終了ステータス)は、${?}変数に保存されます。
3
Craft