为什么这个bash脚本不会退出?

wiz*_*urd 4 bash

可能是一个基本问题,但我不确定为什么日志记录会导致此退出函数无法按预期工作:

#!/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)

但输出是"你永远不应该看到这个"

cho*_*oba 7

如上所述man bash,

管道中的每个命令都作为单独的进程执行(即,在子shell中).

因此,exit函数中只退出运行函数管道部分的子shell.

并且,

除非pipefail启用该选项,否则管道的返回状态是最后一个命令的退出状态.

因此,您可以通过预先添加来更改行为

set -eo pipefail
Run Code Online (Sandbox Code Playgroud)

到脚本(-e使您的脚本在出错时停止).尽管如此,请注意使用exit 0不会结束它.