所以我把它放在 bash 脚本文件的开头(-e 和 -o)。 但是,在某些功能中,我希望它不要退出。示例
set -e
set -o pipefail
function check_status {
echo "Start Check"
docker exec mservice bash -c "echo 'Hello' | grep 'fail'"
echo "End check"
}
check_status
如何防止它退出脚本 - 基本上,如果我运行它,它会打印出“开始检查”,但随后退出,因为下一个命令返回“1”。
我希望能够在多个位置或不同的功能中禁用和启用 set -e/-o。
对于所有选项,
set -x
的相反是 set +x
(注意加号)。
因此
set +e
将撤消 set -e
,而 set +o pipefail
将撤消 set -o pipefail
。
您也可以不理会设置,只需执行以下简单操作即可:
docker exec mservice bash -c "echo 'Hello' | grep 'fail'" || true
...这样做会强制成功运行该命令列表。在这种情况下,没有编程方法可以检测 docker 命令的失败,但如果该命令发出一些错误消息,人类观察者可能会注意到。
或者你可以在你的函数中处理错误
#!/usr/bin/env bash
set -e
set -o pipefail
function check_status {
if docker exec mservice bash -c "echo 'Hello' | grep 'fail'"; then
echo good
else
echo bad
fi
}
status=$(check_status)
if [ "$status" = 'bad' ]; then
echo "check_status failed, but still running, handling the error..."
fi
另存为
testfail.sh
并为我运行它会导致失败,因为我的 docker 安装不包含任何名为 mservice
:
$ ./testfail.sh
Error response from daemon: No such container: mservice
check_status failed, but still running, handling the error...
$