流式传输命令的标准输出,并与终端的标准输入合并为单个标准输出

流式传输命令的标准输出,并与终端的标准输入合并为单个标准输出

这个答案展示了将多个命令传输到另一个命令的多种方法,但由于它们使用子 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

这样,我就可以通过管道将输出传送到另一个命令而不是文件。

相关内容