假设我使用像bash或zsh这样的shell,并且还假设我有一个写入stdout的命令。我想将命令的输出捕获到shell变量中,并将命令的返回代码捕获到另一个shell变量中。
我知道我可以做这样的事情......
command >tempfile
rc=$?
output=$(cat tempfile)
然后,我在' rc'中有返回代码。 shell变量和'输出中的命令输出' shell变量。
但是,我想在不使用任何临时文件的情况下这样做。
另外,我可以这样做以获得命令输出...
output=$(command)
...但是,我不知道如何将命令的返回代码放到任何shell变量中。
有人可以建议一种方法来将返回代码和命令的输出同时转换为两个shell变量,而不使用任何文件吗?
非常感谢。
答案 0 :(得分:2)
像以前一样抓住$?
。使用可执行文件true
和false
,我们可以证明命令替换确实设置了正确的返回码:
$ 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
部分:
如果其中一个扩展包含命令替换,则退出 命令的状态是最后一个命令的退出状态 替换进行。如果没有命令替换,那么 命令退出状态为零。