管道如何在Bash中工作的简单解释是什么?我经常在Bash中使用管道,例如:dmesg | less虽然我知道这是什么输出,它需要dmesg并让我滚动它less,我不明白|它在做什么。它恰恰相反>吗?对于什么有简单或隐喻的解释|?在一条线路中使用多个管道时会发生什么?管道的行为在Bash脚本中出现的位置是否一致?
3 回答
收到一只叮咚
TA贡献1821条经验 获得超4个赞
Unix中的每个标准进程至少有三个文件描述符,它们有点像接口:
标准输出,即进程打印其数据的位置(大多数情况下是控制台,即屏幕或终端)。
标准输入,它是从中获取数据的地方(大多数情况下它可能类似于键盘)。
标准错误,这是错误和有时其他带外数据发生的地方。它现在没有意思,因为管道通常不处理它。
管道将过程的标准输出连接到左侧的过程的标准输入。您可以将其视为一个专用程序,负责复制一个程序打印的所有内容,并将其提供给下一个程序(管道符号后面的程序)。这不是那个,但它足够类比。
每个管道只运行两件事:标准输出来自其左侧,输入流预期位于其右侧。其中每个都可以附加到单个进程或管道的另一个位,这是多管道命令行中的情况。但这与管道的实际操作无关; 每个管道都有自己的。
重定向operator(>
)执行相关操作,但更简单:默认情况下,它将进程的标准输出直接发送到文件。正如你所看到的那样,它不是管道的反面,而是实际上是互补的。>
不足为奇的是<
,它获取文件的内容并将其发送到进程的标准输入(将其视为一个逐字节读取文件并在进程中为您键入文件的程序)。
添加回答
举报
0/150
提交
取消