首页 > 解决方案 > 仅当未设置 VERBOSE 时才将输出重定向到 /dev/null

问题描述

你将如何做到这一点?

if [[ -z $VERBOSE ]]; then
    REDIRECT=">/dev/null 2>/dev/null"
fi

echo "Installing Pip packages"  # Edited in for clarity
pip install requirements.txt $REDIRECT

echo "Installing other dependency"
<Install command goes here> $REDIRECT

标签: bashshellenvironment-variablesoutput-redirect

解决方案


您可以使用以下命令重定向所有输出exec

if [[ -z $VERBOSE ]]; then
    exec >/dev/null 2>&1
fi

pip install requirements.txt

如果您想稍后在脚本中恢复输出,您可以复制文件描述符:

if [[ -z $VERBOSE ]]; then
    exec 3>&1
    exec 4>&2
    exec >/dev/null 2>&1
fi

# all the commands to redirect output for
pip install requirements.txt
# ...

# restore output
if [[ -z $VERBOSE ]]; then
    exec 1>&3
    exec 2>&4
fi

另一种选择是打开文件描述符/dev/null或复制描述符1

if [[ -z $VERBOSE ]]; then
    exec 3>/dev/null
else
    exec 3>&1
fi

echo "Installing Pip packages"
pip install requirements.txt >&3


推荐阅读