标准输入和标准输出不是命令。
想象一下,将命令当作工厂中具有装配线的机器。大多数机器被设计为具有一条传送带将数据输入和一条传送带将数据输出。它们分别是标准输入和标准输出。标准错误是机器侧面上的一个开口,可以弹出不合格品。
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
上图显示了一条穿过两台机器的传送带。数据来自左侧的输入存储库,然后输入到机器A,然后将输出进一步传送到机器B(为其输入数据),机器B的输出存储在右边的输出存储桶中。
用Unix术语,这称为管道。隐喻是管道:管道将机器A与机器B连接起来。上述管道的Shell语法为
<input-file.txt commandA | commandB >output-file.txt
该<
重定向符号告诉shell连接commandA
的标准输入到文件input-file.txt
启动之前commandA
。(您可以在命令名之前或之后放置重定向。)>
重定向符号告诉Shell将commandB
标准输出连接到output-file.txt
。|
中间的竖线(“ ”)符号指示外壳程序在启动之前将commandA
的标准输出连接到commandB
的标准输入。
命令可以具有多个输入和多个输出,但这对于另一天来说很重要。