我.zshenv
会产生一些只有在我的 shell 是交互式的时候才有用的输出。在其他情况下,当 shell 不是交互式的时,这个输出(即当我运行脚本时)必须被隐藏。
如何抑制.zshenv
非交互式 shell 的输出?
PS我在下面添加了我当前的解决方案,但它对我来说似乎很骇人听闻。
我.zshenv
会产生一些只有在我的 shell 是交互式的时候才有用的输出。在其他情况下,当 shell 不是交互式的时,这个输出(即当我运行脚本时)必须被隐藏。
如何抑制.zshenv
非交互式 shell 的输出?
PS我在下面添加了我当前的解决方案,但它对我来说似乎很骇人听闻。
我补充说:
if [[ ! -o interactive ]]; then
exec 1>&-
exec 1<>/dev/null
fi
在我的.zshenv
文件顶部关闭原始1
标准输出文件描述符并分配/dev/null
给它。
在底部我添加了:
if [[ ! -o interactive ]]; then
exec 1>&0
fi
恢复它(请参阅关闭 STDOUT 和 STDERR 后重新打开它们?)。
我的其他答案在某些情况下效果不佳。
我将.zshenv
内容移动到一个函数run
并为此函数输出添加了条件重定向:
function run() {
// .zshenv content
}
OUTPUT=1
if [[ ! -o interactive ]]; then
OUTPUT=3
eval "exec $OUTPUT<>/dev/null"
fi
run >& $OUTPUT
if [[ ! -o interactive ]]; then
eval "exec $OUTPUT>&-"
fi