我正试图理解为什么和如何 cat
命令会以其特定的方式解析标准输入。
当我将 cat
的标准输入设置为 "infile.txt" 时,标准输入会被简单地写入到标准输出:
~$ echo foo bar test > infile.txt
~$ cat < infile.txt
foo bar test
~$
这符合我的预期。但是当我使用cat并将其stdin设置为我的(p)tty时,stdin会被复制到stdout直到读取到EOF为止。
~$ cat
foo bar test
foo bar test
input is duplicated
input is duplicated
^C
~$
对于每一组:
- 用户输入时,第一行将被显示。(这不会写入到stdout/stderr)
- 用户按下
[enter]
后,第二行将被输出。(这将被写入stdout)
这是怎么实现的呢?据我所知,sh
以这样的方式解析上述两个命令,即使用(argc=1, argv=["cat"])调用cat
。因此,对cat
的调用相同。如果是这种情况,那么为什么~$ cat < infile.txt
示例中没有重复的输出呢?
由于cat
从infile.txt
读取每个字符,它不应该也像简单的~$ cat
示例一样打印出已读取的字符吗?
我查看了这个简单(ish)的实现[1],但它的行为与ubuntu 18.04的cat不同。它不像简单的~$ cat
示例那样打印出重复的输入。