根据变量抑制输出

时间:2013-03-15 12:05:03

标签: bash

我有一个带有可选详细程度参数的脚本。根据它的值,我想要抑制输出(在下面的例子中推送,但实际上是其他的,主要是git命令)。例如:

verb=1
# pushd optionally outputs path (works but too long)
if [ $verb ]; then
  pushd ..
else
  pushd .. > /dev/null
fi
popd > /dev/null  # the same if.. would be needed here

我正在寻找的是:

push .. $cond  # single line, outputing somehow controlled directly
popd $cond     # ditto

有人可以帮忙吗?谢谢,

汉斯 - 彼得

2 个答案:

答案 0 :(得分:2)

您可以将输出重定向到定义取决于$verb

的函数
#! /bin/bash

verb=$1

if [[ $verb ]] ; then
    verb () {
        cat
    }
else
    verb () {
        :     # Does nothing.
    }
fi

echo A | verb

答案 1 :(得分:1)

使用不同的文件描述符重定向到:

if (( $verb ))
then
    exec 3>&1
else
    exec 3>/dev/null
fi

push .. >&3
popd >&3

这样,条件只在开始时测试一次,而不是每次重定向时测试。