shell 为什么在使用标准输入时'paste'的输出不同?

x9ybnkn6  于 2023-03-03  发布在  Shell
关注(0)|答案(1)|浏览(130)

来自男性:
paste写入由每个给定文件的顺序对应行组成的标准输出行,由TAB字符分隔。标准输入用于文件名为"-"或未给定输入文件的情况。
如果我的理解是正确的(当paste不是从标准输入中输入时,这似乎是适用的),这意味着,例如,命令paste file1 file2将输出许多行,其中第n行由file1的第n行组成,后跟TAB,然后是file2的第n行。
然而,如果我们用-来替换每个文件,表示标准输入,那么输出的每一行都将由两个连续的标准输入行组成,用TAB分隔,而不是同一行重复两次,这是为什么呢?
例如,给定文件foo.txt

1
2
3
4

运行命令paste foo.txt foo.txt将得到以下输出:
但是运行paste - - < foo.txt会导致:
我认为paste - - < foo.txt * 只"打开"* 文件一次,而paste foo.txt foo.txt打开同一文件的两个示例,因此使用了两个"* 游标 *",但我不确定这是否正确,或者这是否是发生这种情况的原因。

wfveoks0

wfveoks01#

因此使用了两个“游标”,但我不确定这是否正确
这是千真万确的。
用更专业的术语来说,打开文件会创建一个file descriptor。文件描述符有一个关联的文件位置指示符(光标)“便于有序地前进通过文件”。paste - -使paste从相同的标准输入文件描述符读取两次,从而将相同的文件位置指示符递增两次。当paste foo.txt foo.txt使粘贴打开引用相同文件的两个文件描述符时,但是两个文件描述符具有单独的文件位置指示符。

相关问题