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

use*_*134 14 bash

我用了

exec > /dev/null
Run Code Online (Sandbox Code Playgroud)

抑制输出.

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

Cha*_*ffy 18

要做到这一点,您需要在将其重新映射到/ dev/null之前将原始FD 1复制到其他位置.在这种情况下,我在FD 5上存储备份:

exec 5>&1 >/dev/null
...
exec 1>&5
Run Code Online (Sandbox Code Playgroud)

另一种选择是在块中重定向stdout而不是使用exec:

{
    ...
} >/dev/null
Run Code Online (Sandbox Code Playgroud)

  • @jerzy,...也就是说,您可能想单独备份 stderr(即备份到 FD 6);否则,在恢复它时,您将强制它与 stdout 相同,即使它一开始并不相同。在这种情况下,您需要在备份端添加一个 `6>&2`,在恢复端添加一个 `2>&6`。 (2认同)

Vau*_*ato 5

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

exec >/dev/tty
Run Code Online (Sandbox Code Playgroud)

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

{
   command
   command
} >/dev/null
Run Code Online (Sandbox Code Playgroud)

  • 仅当原始标准输出转到 TTY 时,这才是正确的,情况可能是也可能不是。 (2认同)