如何撤消exec> bash中的/ dev / null?

时间:2013-07-24 16:55:14

标签: bash

我用过

exec > /dev/null

抑制输出。

是否有撤消此命令的命令? (不重新启动脚本。)

5 个答案:

答案 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)

不是真的,因为这需要更改正在运行的进程的状态。即使你可以,无论你在重置标准输出之前写的是什么,都是真的,完全消失了,因为它被发送到比特桶。