执行命令并将所有内容存储到 bash 中的变量中

执行命令并将所有内容存储到 bash 中的变量中

在我正在开发的 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输出保存到文件。
  • 命令的返回代码(退出状态)保存到${?}变量中。

相关内容