当我们自己打开文件描述符并将其重定向到stdin时,为什么只能使用1次呢?请看下面的例子来理解我想说的话。使用cat命令一次读取该文件后,将不会第二次通过同一个文件描述符读取该文件。
└─$ exec 6< input.txt
└─$ cat <&6
i am just string
and another string..
└─$ cat <&6
└─$发布于 2020-12-29 21:53:39
要打印文件,第一个cat必须读取它直到结束。exec 6< input.txt会导致shell保存文件描述符,直到外壳死亡或关闭为止,因此当第二个cat被调用时,文件偏移量仍然指向文件的末尾,因此没有向stdout写入任何内容。
如果在基于Linux的系统上,通过查看文件描述符信息可以看到这种情况:
echo "File contents" > input.txt
exec 6< input.txt
cat "/proc/$/fdinfo/6"
cat <&6
cat "/proc/$/fdinfo/6"
cat <&6如果执行该脚本,您将得到以下内容
pos: 0
flags: 0100000
mnt_id: 113
File contents
pos: 14
flags: 0100000
mnt_id: 113确认执行第二个cat时偏移量(D6)不是0,而是指向它的末尾。
若要重置偏移量,可以在exec 6< input.txt S之间添加另一个cat。
https://unix.stackexchange.com/questions/626700
复制相似问题