猫和猫在一起

Cat and cat piped together

让我们考虑一下:

cat | cat 

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

特别是,它是如何工作的:

cat < uns2.txt > ss2.txt | sort   

我不明白什么更重要:> vs |

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

I cannot understand what is more important: > vs |

现在我们谈论的是 shell 的作用,而不是它调用的程序。在没有重定向的情况下,shell 将标准输入和输出(以及错误)附加到终端。重定向,嗯,重定向 东西。

使用 <,shell 打开右侧命名的文件,并将该描述符替换为标准输入。使用|,shell创建一个管道,并将左边程序的标准输出替换为管道的写入端,右边程序的标准输入替换为管道的读取端管道。被调用的程序(例如cat)继续"write to stdout"; shell 只是改变了 "stdout" 的意思。

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

如评论中所述,一本关于 Unix shell 的书可能对您有用。你不能一次一个问题地学习这类东西。