谁能告诉我区别?例如:
如果我有一个a.txt
包含以下内容的文件:
a
b
c
cat a.txt | cat
和之间有什么区别在cat < a.txt
我看来,它们都模拟标准输入,是正确的,还是有区别?非常感谢。
谁能告诉我区别?例如:
如果我有一个a.txt
包含以下内容的文件:
a
b
c
cat a.txt | cat
和之间有什么区别在cat < a.txt
我看来,它们都模拟标准输入,是正确的,还是有区别?非常感谢。
管道从一个进程到另一个进程(cat
第一个示例中的 s),因此需要两个进程协作。重定向由 shell 本身处理。在 shell 中做一些事情(例如使用变量)时,这可能很重要。
重定向不会“模拟 STDIN”。当您重定向时,该文件是该进程的标准输入。特别是,如果输入是常规文件,与输入是管道或 tty 相比,许多程序的行为会有所不同,因此您可能会得到不同的行为。例如:
$ < file perl -E '如果 -f STDIN' 说“是一个普通文件” 是一个常规文件 $ 猫文件 | perl -E '如果 -f STDIN' 说“是一个普通文件”
首先,两个结果相同。没什么好说的。
对于 的工作原理cat a.txt | cat
,第一个 cat 接受参数a.txt
,然后打印其内容。stdout
您将第一个到stdin
第二个的管道。第二个cat
找不到参数,因此它从 读取内容stdin
并打印它。
因为您<
在第二个命令中使用,系统将 替换stdin
为cat
的文件流a.txt
。其他任何事情都与第一种情况下的第二只猫相同。