shell:捕获命令输出并返回两个不同变量的状态

时间:2016-09-07 01:35:40

标签: shell redirect stdout return-code

假设我使用像bash或zsh这样的shell,并且还假设我有一个写入stdout的命令。我想将命令的输出捕获到shell变量中,并将命令的返回代码捕获到另一个shell变量中。

我知道我可以做这样的事情......

command >tempfile
rc=$?
output=$(cat tempfile)

然后,我在' rc'中有返回代码。 shell变量和'输出中的命令输出' shell变量。

但是,我想在不使用任何临时文件的情况下这样做。

另外,我可以这样做以获得命令输出...

output=$(command)

...但是,我不知道如何将命令的返回代码放到任何shell变量中。

有人可以建议一种方法来将返回代码和命令的输出同时转换为两个shell变量,而不使用任何文件吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

像以前一样抓住$?。使用可执行文件truefalse,我们可以证明命令替换确实设置了正确的返回码:

$ output=$(true); rc=$?; echo $rc
0
$ output=$(false); rc=$?; echo $rc
1

一项任务中的多个命令替换

如果赋值中出现多个命令替换,则最后一个命令替换的返回码确定赋值的返回码:

$ output="$(true) $(false)"; rc=$?; echo $rc
1
$ output="$(false) $(true)"; rc=$?; echo $rc
0

文档

从描述变量赋值的man bash部分:

  

如果其中一个扩展包含命令替换,则退出   命令的状态是最后一个命令的退出状态   替换进行。如果没有命令替换,那么   命令退出状态为零。