【问题标题】:Disable .zshenv output for non-interactive shell为非交互式 shell 禁用 .zshenv 输出
【发布时间】:2017-11-23 04:46:55
【问题描述】:

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

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

附:我在下面添加了我当前的解决方案,但对我来说这似乎很老套。

【问题讨论】:

  • 如果代码除了产生输出之外什么都不做,请将代码放入.zshrc而不是.zshenv。
  • @chepner 感谢您的建议,但实际上我将代码从 .zshrc 移到了 .zshenv,因为它为交互式和非交互式 shell 设置了环境。

标签: shell zsh non-interactive


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我补充说:

    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?)。

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 2013-05-06
      • 2020-06-24
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 2016-02-17
      相关资源
      最近更新 更多