**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。
这个问题似乎不是关于在help center定义的范围内编程。
21天前关闭。
Improve this question
$exec 3<input.txt
$sleep 60 >&3 &
[1] 32524
$ cd/proc/32534/fd
$ ls -l
lrwx------. 1 zhangchen zhangchen 64 Sep 24 18:29 0 -> /dev/pts/0
lr-x------. 1 zhangchen zhangchen 64 Sep 24 18:29 1 -> /home/zhangchen/input.txt
lrwx------. 1 zhangchen zhangchen 64 Sep 24 18:29 2 -> /dev/pts/0
lr-x------. 1 zhangchen zhangchen 64 Sep 24 18:29 3 -> /home/zhangchen/input.txt
$grep test_word <&3
test_word
$grep test_word <&3
[nothing output]
grep不是用describer 1搜索文件吗,为什么grep修改了文件describer 3?
2条答案
按热度按时间kxeu7u2r1#
它不会改变FD 3上打开的文件,也不会改变文件的内容。改变的是 * 您在文件中的位置 *。
你打开
input.txt
一次。在运行grep之前,文件指针位于文件的前面。
运行grep后,文件指针位于文件末尾。
它仍然指向同一个文件,但您不再位于文件的前端,因此如果您正在运行的程序不使用
seek()
倒回前端,则没有内容可供读取。如果你运行一个程序,你可以 * 倒带到前面:
ve7v8dk22#
你的问题模棱两可:你提供了一些命令和它们的输出,后面跟着一个问题,希望读者理解你的意图;我建议如果你花更多的时间仔细地写你的问题,你会得到更有用的答案。也就是说,如果我正确理解了你的问题,grep使用的是文件描述符3,因为你用
<&3
显式重定向了标准输入。