在 Bash 中,运行时mycommand < myfile
,我修改了myfile
内容。
myfile
得到什么内容mycommand
?是否mycommand
获得了我开始运行它时的原始内容,或者它是否获得了随着我的修改而myfile
修改的内容?myfile
答案1
这取决于mycommand
做什么。如果它休眠 10 分钟然后开始读取其标准输入,它会看到您的修改(如果已经完成)。如果它第一次读取文件的一部分,然后修改该文件,然后它进行第二次读取,它将看到超出已读取点的更改。
另外,由于许多程序使用缓冲,当您认为您的命令只读取了 1 行时,它实际上可能读取了更多内容(“缓冲区已满”,通常为 8192 字节)。
但请注意,编辑程序经常会删除文件并重新创建包含更改的新文件。在这种情况下,您的程序仍将使用旧的已删除文件内容,并且看不到任何更改。这是因为当您打开文件时,文件名会转换为其对应的唯一“inode”,您不再需要文件名。如果有人删除该文件,只要仍有程序打开该文件,此 inode 就会继续存在。当使用相同文件名创建新文件时,它将获得不同的唯一 inode。