这是一个尝试执行命令并检查它是否成功执行的示例,同时捕获它的输出以进行进一步处理:
#!/bin/bash
readonly OUTPUT=$(foo)
readonly RES=$?
if [[ ${RES} != 0 ]]
then
echo "failed to execute foo"
exit 1
else
echo "foo success: '${OUTPUT}'"
fi
它报告说这是成功的,即使没有这样的 foo
可执行文件。但是,如果我删除 readonly
从 OUTPUT
变量,它保留错误的退出代码并检测到故障。
我尝试使用readonly作为“防御性编程”技术,如某处推荐的那样...但在这种情况下看起来像是咬自己。
是否有一些清洁的解决方案来保存 readonly
同时仍然捕获命令/子shell的退出代码?令人失望的是,必须记住这种特殊用例,或者还原为不使用 readonly
曾...
在Debian Wheezy上使用Bash 4.2.37(1)。