8

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

a
b
c

cat a.txt | cat和之间有什么区别在cat < a.txt
我看来,它们都模拟标准输入,是正确的,还是有区别?非常感谢。

4

3 回答 3

11

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

于 2011-04-27T10:55:53.907 回答
3

重定向不会“模拟 STDIN”。当您重定向时,该文件该进程的标准输入。特别是,如果输入是常规文件,与输入是管道或 tty 相比,许多程序的行为会有所不同,因此您可能会得到不同的行为。例如:

$ < file perl -E '如果 -f STDIN' 说“是一个普通文件”
是一个常规文件
$ 猫文件 | perl -E '如果 -f STDIN' 说“是一个普通文件”
于 2011-04-27T11:10:01.560 回答
1

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

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

因为您<在第二个命令中使用,系统将 替换stdincat的文件流a.txt。其他任何事情都与第一种情况下的第二只猫相同。

于 2017-08-22T10:18:47.320 回答