禁用非交互式shell的.zshenv输出

时间:2017-06-20 14:53:53

标签: shell zsh non-interactive

我的.zshenv产生的输出仅在我的shell是交互式时才有用。 在其他情况下,当shell不是交互式时,必须隐藏此输出(即当我运行脚本时)。

如何禁止非交互式shell的.zshenv输出?

P.S。我在下面添加了我当前的解决方案但对我来说似乎很苛刻。

2 个答案:

答案 0 :(得分:1)

我补充说:

if [[ ! -o interactive ]]; then
    exec 1>&-
    exec 1<>/dev/null
fi

在我的.zshenv文件的顶部,以关闭原始1标准输出文件描述符并为其分配/dev/null

在底部,我补充道:

if [[ ! -o interactive ]]; then
  exec 1>&0
fi

恢复它(见Reopen STDOUT and STDERR after closing them?)。

答案 1 :(得分:0)

My other answer在某些情况下效果不佳。

我将.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