当在Bash脚本中使用命令替换调用另一个脚本时,可能会遇到子脚本失败却不会停止父脚本的问题。这是因为当子脚本失败时,命令替换将其错误输出(stderr)重定向到/dev/null并返回一个空串而不是退出状态码。
为了避免这个问题,我们可以在父脚本中增加错误处理程序。我们可以在命令替换中加入set -e命令来确保子脚本失败时父脚本能够及时退出。以下是示例代码:
#!/bin/bash
# 错误处理程序
function handle_error {
echo '子脚本执行失败'
exit 1
}
# 调用子脚本并检查错误状态码
if ! result=$(set -e; ./child_script.sh); then
handle_error
fi
echo '执行结果:'
echo $result
在这个例子中,我们使用了set -e命令来在调用子脚本时检查错误状态码。如果子脚本执行失败,它将会导致父脚本终止并调用错误处理程序。如果子脚本执行成功,它的结果将被打印出来。