管道如何工作?如果我通过 CLI 运行一个程序并将输出重定向到一个文件,我是否能够在写入该文件时将该文件通过管道传输到另一个程序中?
基本上,当一行写入文件时,我希望它立即通过管道传输到我的第二个应用程序(我正在尝试从现有程序动态绘制图表)。只是不确定管道是否完成第一个命令,然后再继续执行下一个命令。
任何反馈将不胜感激!
如果您想将一个程序的输出重定向到另一个程序的输入,只需使用一个简单的管道:
program1 arg arg | program2 arg arg
如果你想保存输出program1
到一个文件中and通过管道将其输入program2
, 您可以使用tee(1) http://linux.die.net/man/1/tee:
program1 arg arg | tee output-file | program2 arg arg
管道中的所有程序同时运行。大多数程序通常使用blockingI/O:如果当他们尝试读取输入但什么也没有时,他们block:也就是说,它们会停止,操作系统会取消它们的运行计划,直到有更多输入可用(以避免占用 CPU)。类似地,如果管道中较早的程序写入数据的速度比后面的程序读取数据的速度快,最终管道的缓冲区会被填满并且写入器会阻塞:操作系统会取消调度它,直到管道的缓冲区被读取器清空,然后它可以再次继续写入。
EDIT
如果你想使用的输出program1
作为命令行参数,您可以使用反引号或$()
syntax:
# Runs "program1 arg", and uses the output as the command-line arguments for
# program2
program2 `program1 arg`
# Same as above
program2 $(program1 arg)
The $()
语法应该是首选,因为它们更清晰,并且可以嵌套。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)