我用了
exec > /dev/null
抑制输出。
有命令撤消这个吗?(无需重新启动脚本。)
要做到这一点,您需要将原始 FD 1 复制到其他地方,然后再将其重新指向 /dev/null。在这种情况下,我将备份存储在 FD 5 上:
exec 5>&1 >/dev/null
...
exec 1>&5
另一种选择是在块内重定向标准输出,而不是使用exec
:
{
...
} >/dev/null
如果您只想在命令提示符下再次获得输出,您可以这样做:
exec >/dev/tty
如果您正在创建脚本,并且希望重定向某组命令的输出,请将这些命令放在大括号中:
{
command
command
} >/dev/null
预先保存原始输出目标。
# $$ = the PID of the running script instance
STDOUT=`readlink -f /proc/$$/fd/1`
STDERR=`readlink -f /proc/$$/fd/2`
并再次使用exec
.
exec 1>$STDOUT 2>$STDERR
如果您/dev/tty
在上面的答案中使用恢复,与此相反,您将无法在呼叫级别进行重定向,例如bash script.sh &>/dev/null
将无法工作。
并非如此,因为这需要更改正在运行的进程的状态。即使假设你可以,你在重置标准输出之前写的任何东西都真的完全消失了,因为它被发送到了比特桶。
要恢复标准输出,我使用
unset &1