MUTE='&> /dev/null'
echo "text" $MUTE
Run Code Online (Sandbox Code Playgroud)
有没有办法使该工作保持变量内的重定向?
恕我直言,使用变量的存在/值来有条件地关闭文件描述符会更优雅,例如
$ cat myscript.sh
#!/bin/bash
if [ -n "$MUTE" ]; then
exec &>-
fi
echo somestuff
echo someerr >&2
Run Code Online (Sandbox Code Playgroud)
然后
$ ./myscript.sh
somestuff
someerr
Run Code Online (Sandbox Code Playgroud)
但
$ MUTE=yes ./myscript.sh
$
Run Code Online (Sandbox Code Playgroud)
如果你真的想切换重定向,你可以考虑创建一个 shell 函数,在关闭它们之前复制文件描述符,然后恢复重复项以重新启用原始流,例如
#!/bin/bash
function mute {
case "$1" in
"on")
exec 3>&1-
exec 4>&2-
;;
"off")
exec 1>&3-
exec 2>&4-
;;
*)
esac
}
# Demonstration:
echo "with mute on: "
mute on
ls somefile
ls nofile
mute off
echo "with mute off: "
ls somefile
ls nofile
Run Code Online (Sandbox Code Playgroud)
结果:
$ ./mute.sh
with mute on:
with mute off:
somefile
ls: cannot access nofile: No such file or directory
Run Code Online (Sandbox Code Playgroud)