这可能是一个基础问题,但我不确定为什么记录日志会导致此退出函数不能按预期工作:
#!/bin/bash
function exitFunct
{
exit 1
}
exitFunct 2>&1 | tee -a /var/tmp/output.txt
echo "You should never see this"
但是输出结果是“你永远不应该看到这个”。
这可能是一个基础问题,但我不确定为什么记录日志会导致此退出函数不能按预期工作:
#!/bin/bash
function exitFunct
{
exit 1
}
exitFunct 2>&1 | tee -a /var/tmp/output.txt
echo "You should never see this"
man bash
的解释,管道中的每个命令都会作为一个单独的进程执行(例如,在一个子shell中)。因此,函数中的exit
仅退出运行该函数部分管道的子shell。另外,根据下述说明:除非启用了pipefail
选项,否则管道的返回状态是最后一个命令的退出状态。
set -eo pipefail
在脚本中添加-e
可以使您的脚本在错误发生时停止。不过,请注意使用exit 0
不能结束它。
exit
是退出由管道生成的子Shell而不是父Shell。(只是为了明确这一点。) - Etan Reisnergrep
结束脚本,可以在 or 中处理这种情况:grep ... || echo 没有找到任何内容
。 - choroba