18

我用了

exec > /dev/null

抑制输出。

有命令撤消这个吗?(无需重新启动脚本。)

4

5 回答 5

24

要做到这一点,您需要将原始 FD 1 复制到其他地方,然后再将其重新指向 /dev/null。在这种情况下,我将备份存储在 FD 5 上:

exec 5>&1 >/dev/null
...
exec 1>&5

另一种选择是在块内重定向标准输出,而不是使用exec

{
    ...
} >/dev/null
于 2013-07-24T17:05:09.957 回答
4

如果您只想在命令提示符下再次获得输出,您可以这样做:

exec >/dev/tty

如果您正在创建脚本,并且希望重定向某组命令的输出,请将这些命令放在大括号中:

{
   command
   command
} >/dev/null
于 2013-07-24T16:56:57.220 回答
1

预先保存原始输出目标。

# $$ = 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将无法工作。

于 2019-07-12T09:28:57.063 回答
-1

并非如此,因为这需要更改正在运行的进程的状态。即使假设你可以,你在重置标准输出之前写的任何东西都真的完全消失了,因为它被发送到了比特桶。

于 2013-07-24T16:57:15.030 回答
-1

要恢复标准输出,我使用

unset &1
于 2016-05-06T14:55:20.070 回答