假设我在 bash 中有以下命令:
one | two
one
运行很长时间产生输出流并且two
对该流的每一行执行快速操作,但是two
除非它读取的第一个值告诉它每行要读取多少个值,否则根本不起作用。one
不输出该值,但我提前知道它是什么(假设它是15
)。我想发送一个15\n
在输出之前通过管道one
。我不想修改one
or two
.
我的第一个想法是:
echo "$(echo 15; one)" | two
这给了我正确的输出,但它根本不会通过管道传输,直到命令one
完成。我希望输出立即开始通过管道传输,因为执行需要很长时间(数月)。
我也尝试过:
echo 15; one | two
当然,输出 15,但不会通过管道将其发送到two
.
bash 有没有办法通过管道传递“15\n”,然后开始流式传输输出one
通过同一管道?
您只需要 shell 分组结构:
{ echo 15; one; } | two
大括号周围的空格和尾随分号是必需的。
To test:
one() { sleep 5; echo done; }
two() { while read line; do date "+%T - $line"; done; }
{ printf "%s\n" 1 2 3; one; } | two
16:29:53 - 1
16:29:53 - 2
16:29:53 - 3
16:29:58 - done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)