This question already has answers here:
Capture stdout and stderr into different variables
(13个答案)
四年前关闭。
我需要在bash脚本中捕获命令的输出和错误,并知道该命令是否成功。
目前,我正在捕获这两个:
output=$(mycommand 2>&1)

然后我需要检查MyRead的退出值。如果失败了,我需要对输出做一些事情,如果命令成功了,我不需要触摸输出。
因为我正在捕获输出,检查$?始终为0,因为bash成功地将输出捕获到变量中。
这是一个对时间非常敏感的脚本,因此我们试图避免任何较慢的解决方案,如输出到文件并重新读取它。
如果我可以将stdout捕获到一个变量,将stderr捕获到另一个变量,这将解决我的问题,因为我可以检查错误变量是否为空。
谢谢。

最佳答案

您使用的是什么版本的bash?捕获输出对我的版本的返回代码没有任何影响,4.1.5

pax> false; echo $?
1
pax> echo $?
0
pax> x=$(false 2>&1) ; echo $?
1

依靠非空的标准错误来检测错误并不总是一个好主意。许多程序不输出错误,而只依赖返回代码。

关于bash - bash变量分别捕获stderr和stdout或获取退出值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3632603/

10-11 17:33
查看更多