这个答案展示了将多个命令传输到另一个命令的多种方法,但由于它们使用子 shell,因此您无法执行 stdin。
虽然您可以使用命名管道实现这一点,但它有点丑陋并且之后可能会留下剩余的进程:
$ mkfifo p
$ while :; do sleep 5s; echo save; done > p &
$ cat p > output &
$ cat </dev/stdin > p
test
asdf
woot
^C
$ cat output
save
test
asdf
save
save
woot
save
$ jobs
[1]- Running while :; do
sleep 5s; echo save;
done > p &
[2]+ Running cat p > output &
有没有办法用一个命令来实现这一点?理想情况下,我希望这样做:
someutil <(while :; do sleep 5s; echo save; done) /dev/stdin > output
这样,我就可以通过管道将输出传送到另一个命令而不是文件。