我有一个脚本.我想给这个脚本一个安静模式和一个详细模式.
这相当于:
if $verbose
then
redirect="> /dev/null"
fi
echo "Verbose mode enabled" $redirect # This doesn't work because the redirect isn't evaluated.
Run Code Online (Sandbox Code Playgroud)
我真的想要一个更好的方法,比为每个受影响的语句编写if-elses.
eval可以起作用,但对其他变量有明显的副作用.
Cas*_*bel 10
你可以编写一个包装函数:
redirect_cmd() {
# write your test however you want; this just tests if SILENT is non-empty
if [ -n "$SILENT" ]; then
"$@" > /dev/null
else
"$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用它来使用重定向运行任何命令:
redirect_cmd echo "unsilenced echo"
redirect_cmd ls -d foo*
SILENCE=1
redirect_cmd echo "nothing will be printed"
redirect_cmd touch but_the_command_is_still_run
Run Code Online (Sandbox Code Playgroud)
(如果您需要做的就是回显这个,你当然可以使函数更简单,只需回显第一个参数,而不是将它们全部作为命令运行)
不完美,但是如何将重定向设置为“/dev/null”或“/dev/tty”,然后执行
{
echo "verbose"
....
} > $redirect
Run Code Online (Sandbox Code Playgroud)
从另一个问题得到了这个想法:
#!/bin/sh
if [ $SILENT ]; then
exec &>/dev/null
fi
echo "Silence here."
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4325 次 |
最近记录: |