在我正在开发的 bash 脚本中,我尝试执行命令并捕获变量:
- 标准输出
- 标准错误
- 状态码
如何实现这一目标?该命令是tar
,如果它有任何意义的话。
我尝试了最标准的方法:
TAROUTPUT=$(tar -cf arch.tar /path/to/dir)
根据我所做的一些工作(我实际上没有产生tar
失败)我只得到标准输出由此看来,stderr 不会存储到变量中。完美的解决方案有TAROUTPUT
(带有标准输出和标准错误)和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
输出保存到文件。 - 命令的返回代码(退出状态)保存到
${?}
变量中。