所以我在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
如何防止它退出脚本 - 基本上如果我运行它,它将打印输出“Start Check”,但随后退出,因为下一个命令返回'1'。
我希望能够在多个地方或不同的功能中禁用和启用set -e / -o。
答案 0 :(得分:4)
对于所有选项,set -
的反面都是set +
(请注意加号)。
因此set +e
将撤消set -e
,而set +o pipefail
将撤消set -o pipefail
。
答案 1 :(得分:0)
您也可以单独保留设置,并执行以下简单操作:
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...
$