我用过
exec > /dev/null
抑制输出。
是否有撤消此命令的命令? (不重新启动脚本。)
答案 0 :(得分:17)
要做到这一点,您需要将原始FD 1复制到其他位置,然后再将其重新映射到/ dev / null。在这种情况下,我在FD 5上存储备份:
exec 5>&1 >/dev/null
...
exec 1>&5
另一种选择是在块中重定向stdout而不是使用exec
:
{
...
} >/dev/null
答案 1 :(得分:2)
如果您只想在命令提示符处再次获得输出,则可以执行以下操作:
exec >/dev/tty
如果您正在创建脚本,并且希望重定向某组命令的输出,请将这些命令放在大括号中:
{
command
command
} >/dev/null
答案 2 :(得分:0)
要恢复标准输出我使用
unset &1
答案 3 :(得分:0)
预先保存原始输出目标。
# $$ = 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
无法正常工作。
答案 4 :(得分:-1)
不是真的,因为这需要更改正在运行的进程的状态。即使你可以,无论你在重置标准输出之前写的是什么,都是真的,完全消失了,因为它被发送到比特桶。