我希望它如何运作。
if [ $debug = 0 ]; then
silent=""
else
silent='> /dev/null 2>&1'
fi
#some command
wget some.url $silent
因此,如果设置了$ debug,它将变为
wget some.url > /dev/null 2>&1
否则,如果$ debug未设置为1,则变为
wget some.url
在变量中存储“> / dev / null 2>& 1”不起作用。我怎么能这样做?
答案 0 :(得分:5)
这可能是使用shell函数的一个很好的借口:
silent() {
"$@" > /dev/null 2>&1
}
现在你可以通过以下方式运行程序来使程序沉默:
silent wget some.url
如果你只想有条件地保持沉默,这很容易:
silent() {
if [[ $debug ]] ; then
"$@"
else
"$@" &>/dev/null
fi
}
答案 1 :(得分:3)
您需要shell将变量内容实际解释为命令行的一部分,而不仅仅是作为要作为参数传递给可执行文件的字符串。查看eval
shell builtin。
注意安全漏洞!
答案 2 :(得分:1)
略有不同的方法,但这样的方法可能有效:
if [ $debug = 1 ]; then
exec > /dev/null
fi
#some command
wget some.url
它有条件地将stdout
替换为/dev/null
。
答案 3 :(得分:0)
使用eval
:
eval wget some.url $silent
eval
会将参数重新命名为shell命令,而不是作为被调用程序的参数。
小心;不要在未知或外部输入上运行eval
,否则您将面临一个很大的安全漏洞。