linux中管道和重定向的区别



谁能告诉我有什么不同?例如:
如果我有一个包含以下内容的文件a.txt:


b
c

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

管道从一个进程工作到另一个进程(第一个示例中的cat s),因此需要两个进程合作。重定向由shell本身处理。在shell中做一些事情(比如处理变量)时,这一点很重要。

重定向不"模拟STDIN"。当您重定向时,文件进程的stdin。特别是,如果输入是常规文件,那么许多程序的行为与输入是管道或tty文件时的行为不同,因此您可能会得到不同的行为。例如:

<>之前$ & lt;文件perl -E '说'是一个常规文件'是一个常规文件$ cat file | perl -E 'say "is a regular file" if -f STDIN'

首先,两个结果是相同的。没什么可说的。

对于cat a.txt | cat的工作原理,第一个cat接受参数a.txt,然后打印其内容。将第一个的stdout管道到第二个的stdin。第二个cat没有找到参数,所以它从stdin读取内容,并打印出来。

由于在第二个命令中使用了<,系统将catstdin替换为a.txt的文件流。

相关内容

  • 没有找到相关文章

最新更新