0

.zshenv会产生一些只有在我的 shell 是交互式的时候才有用的输出。在其他情况下,当 shell 不是交互式的时,这个输出(即当我运行脚本时)必须被隐藏。

如何抑制.zshenv非交互式 shell 的输出?

PS我在下面添加了我当前的解决方案,但它对我来说似乎很骇人听闻。

4

2 回答 2

1

我补充说:

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 后重新打开它们?)。

于 2017-06-20T14:53:53.140 回答
0

我的其他答案在某些情况下效果不佳。

我将.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
于 2017-06-20T19:06:33.687 回答