Aym*_*nTM 4 linux pipe executable command
当一个命令以什么方式或以什么格式通过管道传输到另一个命令时,管道输出存在/发送?是临时文件吗?是字符串吗?接收管道输出的命令如何解码/读取该输出?
例子:
echo "Someone string" | ./program | tail
Run Code Online (Sandbox Code Playgroud)
程序“ program
”是否echo
以文件形式接收输出?程序将如何读取该输入?
小智 5
管道是一种重定向形式(将标准输出传输到其他目的地),在 Linux 和其他类 Unix 操作系统中使用,用于将一个命令/程序/进程的输出发送到另一个命令/程序/进程以进行进一步处理. Unix/Linux 系统允许将一个命令的 stdout 连接到另一个命令的 stdin。您可以使用管道字符“|”来实现。
管道用于组合两个或多个命令,在这种情况下,一个命令的输出充当另一个命令的输入,而该命令的输出可能充当下一个命令的输入,依此类推。也可以将其可视化为两个或多个命令/程序/进程之间的临时连接。进行进一步处理的命令行程序称为过滤器。
命令/程序/进程之间的这种直接连接允许它们同时运行,并允许在它们之间连续传输数据,而不必通过临时文本文件或通过显示屏传递数据。管道是单向的,即数据通过管道从左到右流动。
句法 :
command_1 | command_2 | command_3 | .... | command_N
Run Code Online (Sandbox Code Playgroud)
示例:列出所有文件和目录并将其作为 more 命令的输入。
$ ls -l | more
Run Code Online (Sandbox Code Playgroud)
该more
命令将输出ls -l
作为其输入。此命令的最终效果ls -l
是一次显示一屏的输出。管道充当容器,接收输出ls -l
并将其more
作为输入。此命令不使用磁盘将标准输出连接ls -l
到标准输入,more
因为管道是在主内存中实现的。在 I/O 重定向操作符方面,上面的命令等价于下面的命令序列。
$ ls -l -> temp
more -> temp (or more temp)
[contents of temp]
rm temp
Run Code Online (Sandbox Code Playgroud)