如何通过命令管道传输所有 bash 终端输出

如何通过命令管道传输所有 bash 终端输出

我希望能够将所有 bash 终端命令通过某个命令进行管道传输(除了对某人恶作剧之外没有其他理由)。我只想将任何已执行命令的标准输出管道传输到预定的程序中,而无需执行任何特殊操作。

例如:如果该预定程序是cowsay

echo "Hello World"

应该输出

 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

我怎样才能实现这一点?(我喜欢用来恶作剧别人的一些有趣程序包括revcowsaylolcat

答案1

exec > >(COMMAND)

COMMAND在哪里revlolcat或其他。这不适用于cowsay

例如

bash-4.3$ exec > >(rev)
bash-4.3$ echo hello
olleh

解释:

  • exec通常会用另一个进程替换当前 shell,但如果你只是像本例一样给它一个重定向,那么重定向就会针对当前 shell 进行。
  • >重定向标准输出
  • >(COMMAND)输入COMMAND

请注意,如果您有PROMPT_COMMAND,您应该将其定向到 stderr 以避免重定向 stdout。

相关内容