流水线和linux中的重定向之间的区别

时间:2011-04-27 10:52:17

标签: linux redirect pipelining

谁能告诉我区别?例如:
如果我有一个文件a.txt,其中包含以下内容:

  

一个
  b
  ç

cat a.txt | catcat < a.txt之间的区别是什么? 在我看来,他们都模拟STDIN,是正确的,还是有差异?非常感谢。

3 个答案:

答案 0 :(得分:11)

管道从一个进程到另一个进程(第一个示例中为cat),因此需要两个进程协作。重定向由shell本身处理。在shell中执行此操作时很重要,例如working with variables

答案 1 :(得分:3)

重定向不会“模拟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'

答案 2 :(得分:1)

首先,两个结果是相同的。无话可说。

对于cat a.txt | cat的工作原理,第一只猫接受参数a.txt,然后打印其内容。您将第一个stdout管道传输到第二个stdin。第二个cat找不到任何参数,因此它从stdin读取内容并打印出来。

由于您在第二个命令中使用<,系统会将stdin的{​​{1}}替换为cat的文件流。在第一种情况下,其他任何东西都与第二只猫相同。