我希望能够将所有 bash 终端命令通过某个命令进行管道传输(除了对某人恶作剧之外没有其他理由)。我只想将任何已执行命令的标准输出管道传输到预定的程序中,而无需执行任何特殊操作。
例如:如果该预定程序是cowsay
echo "Hello World"
应该输出
_____________
< Hello World >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
我怎样才能实现这一点?(我喜欢用来恶作剧别人的一些有趣程序包括rev
、cowsay
和lolcat
)
答案1
exec > >(COMMAND)
COMMAND
在哪里rev
,lolcat
或其他。这不适用于cowsay
。
例如
bash-4.3$ exec > >(rev)
bash-4.3$ echo hello
olleh
解释:
exec
通常会用另一个进程替换当前 shell,但如果你只是像本例一样给它一个重定向,那么重定向就会针对当前 shell 进行。>
重定向标准输出>(COMMAND)
输入COMMAND
请注意,如果您有PROMPT_COMMAND
,您应该将其定向到 stderr 以避免重定向 stdout。