可能是一个基本问题,但我不确定为什么日志记录会导致此退出函数无法按预期工作:
#!/bin/bash
function exitFunct
{
exit 1
}
exitFunct 2>&1 | tee -a /var/tmp/output.txt
echo "You should never see this"
Run Code Online (Sandbox Code Playgroud)
但输出是"你永远不应该看到这个"
如上所述man bash,
管道中的每个命令都作为单独的进程执行(即,在子shell中).
因此,exit函数中只退出运行函数管道部分的子shell.
并且,
除非
pipefail启用该选项,否则管道的返回状态是最后一个命令的退出状态.
因此,您可以通过预先添加来更改行为
set -eo pipefail
Run Code Online (Sandbox Code Playgroud)
到脚本(-e使您的脚本在出错时停止).尽管如此,请注意使用exit 0不会结束它.