猫与猫一起用管道输送

时间:2016-05-25 13:43:06

标签: sh cat

让我们考虑一下:

cat | cat 

哪一个从stdin终端读取,哪一个写入stdout终端?为什么?

尤其是,它是如何运作的:

cat < uns2.txt > ss2.txt | sort   

我无法理解什么更重要:> vs |

1 个答案:

答案 0 :(得分:1)

每个程序选择如何解释其参数。像许多Unix实用程序一样, cat 被写为过滤器;在命令行没有文件名的情况下,它从标准输入读取并写入标准输出。这使它比例如更方便 tr 从标准输入读取。

  

我无法理解什么更重要:&gt; vs |

现在我们讨论shell的功能,而不是它调用的程序。如果没有重定向,shell会将标准输入和输出(以及错误)附加到终端。重定向,好吧,重定向的东西。

使用<,shell打开右边的文件,并将该描述符替换为标准输入。使用|,shell创建一个管道,并使用管道的写入端将程序的标准输出替换为左侧,并使用管道的读取端将程序的标准输入替换为右侧。被调用的程序(例如 cat )继续“写入stdout”; shell简单地改变了“stdout”的含义。

根据这些信息,您可以回答自己的问题:猫之间的|会将左侧的输出重定向到右侧的输入。第一个 cat 继续从标准输入读取,第二个cat继续写入标准输出。

正如评论中所提到的,关于Unix shell的书可能对你有用。你不能一次只学习这类问题。