我想要做的就是将执行命令的标准输出重定向到一个管道中。下面的例子会更好地解释。
$ echo "Hello world" | cowsay
在cowsay中输出“Hello world”,我想预处理终端/ bash的标准输出,使其通过cowsay
$ echo "Hello world"
这应该输出与第一个命令相同的结果。
提前感谢您。
#!/bin/bash
exec > >(cowsay)
echo "Hello world"
然而,需要注意的是如果您在后台启动任何任务,程序将等待其完成:
#!/bin/bash
exec > >(cowsay)
echo "Hello world"
sleep 30 & # Runs in the background
exit # Script exits immediately but no cow appears
sleep
退出时,奶牛突然出现。#!/bin/bash
exec > >(cowsay)
echo "Hello world"
sleep 30 > /dev/null & # Runs in the background and doesn't keep the cow waiting
exit # Script exits and the cow appears immediately.
如果您没有在后台启动任何内容,那么可能是您的某个工具或程序在运行。为了找到这些问题,可以逐个取消重定向或注释它们,直到问题出现。
mkfifo /tmp/cowsay_pipe
cowsay < /tmp/cowsay_pipe &
exec > /tmp/cowsay_pipe # Redirect all future output to the pipe
echo "Hello world"
cat -n
并且它可以工作,但是当我通过cowsay
时输出为空。 - Joan Font