私が開発している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
出力をファイルに保存します。 - コマンドの戻りコード(終了状態)は
${?}
変数に格納されます。