连接 STDOUT 和 STDIN 是什么意思?

连接 STDOUT 和 STDIN 是什么意思?

我正在看一本书,书中写道:

每个进程至少有三个可用的通信通道:“标准输入”(STDIN)、“标准输出”(STDOUT)和“标准错误”(STDERR)。

大多数命令接受来自 STDIN 的输入并将其输出写入 STDOUT。他们将错误消息写入 STDERR。通过这种约定,您可以像构建块一样将命令串在一起以创建复合管道。

shell 将符号<>>>解释为将命令的输入或输出重新路由到文件的指令。

要将一个命令的 STDOUT 连接到另一命令的 STDIN,请使用| 通常称为管道的符号。

ps -ef | grep httpd

所以基本上这就是说,标准输入是一个允许用户写入文件的命令,而标准输出是一个让 bash shell 将输出写入 shell 的命令,标准错误就像输出一样,但它只是当文件系统出现错误时调用。然后我们开始连接 STDOUT 和 STDIN 的部分,但我迷路了。

答案1

标准输入和标准输出不是命令。

将命令想象为工厂中带有装配线的机器。大多数机器都设计有一条传送带用于输入数据,另一条传送带用于输出数据;它们分别是标准输入和标准输出。标准错误是机器侧面的一个开口,可以在其中弹出废品。

+-------+     +------------------+       +------------------+     +------+
| 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标准输入连接到文件。 (您可以将重定向放在命令名称之前或之后。)重定向符号告诉 shell 将的标准输出连接到。中间的管道(“ ”)符号告诉 shell 在启动它们之前将的标准输出连接到的标准输入。input-file.txtcommandA>commandBoutput-file.txt|commandAcommandB

命令可以有多个输入和多个输出,但这对于另一天

答案2

standard input is a command that allows user to write to a file

不是命令,而是流。标准进出就像邮箱一样。当程序启动时,它会被赋予一个用于接收邮件的框和一个用于发送邮件的框。通常,输入来自键盘并放入收件箱,放入发件箱的邮件最终显示在终端屏幕上。

standard output is a command that has the bash shell write output to the shell

该程序实际上并不知道标准输出点在哪里。当您通过管道将 A 传送到 B 时(如图所示$ A | B),当 A 将邮件放入发件箱时,它最终会到达 B 的收件箱。 B 处理输入并将自己的邮件放入发件箱,这就是您在终端上看到的内容。

如上所述,标准输入/输出是流。邮箱,或文件描述符,是流的一端。连接管道就是将 A 的标准输出连接到 B 的标准输入。

相关内容