Linux中管道和重定向之间的差异
-
24-10-2019 - |
题
谁能告诉我区别?例如:
如果我有文件 a.txt
具有以下内容:
一个
b
C
有什么区别 cat a.txt | cat
和 cat < a.txt
在我看来,他们都模拟了stdin,这是正确的,还是存在差异?非常感谢。
解决方案
管道从一个过程到另一个过程( cat
s在第一个示例中),因此需要两个协作的过程。重定向由壳本身处理。在壳中做事时,这可能很重要 使用变量.
其他提示
重定向不会“模拟stdin”。重定向时,文件 是 该过程的Stdin。特别是,如果输入是常规文件,则许多程序具有不同的行为,与管道或TTY相比,您可能会获得不同的行为。例如:
$ < file perl -E 'say "is a regular file" if -f STDIN' is a regular file $ cat file | perl -E 'say "is a regular file" if -f STDIN'
首先,两个结果是相同的。没什么可说的。
为了工作原则 cat a.txt | cat
, ,第一只猫有争议 a.txt
, ,然后打印其内容。你管 stdout
第一个 stdin
第二。第二 cat
发现没有参数,因此它读取内容 stdin
, 并打印它。
因为您使用 <
在第二个命令中,系统替换 stdin
的 cat
使用文件流 a.txt
. 。在第一种情况下,其他任何东西都与第二只猫相同。
不隶属于 StackOverflow