谁能告诉我区别?例如:
如果我有文件 a.txt 具有以下内容:

一个
b
C

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

有帮助吗?

解决方案

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

其他提示

重定向不会“模拟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, 并打印它。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top