更改文件,同时将其重定向为命令的标准输入

更改文件,同时将其重定向为命令的标准输入

在 Bash 中,运行时mycommand < myfile,我修改了myfile内容。

myfile得到什么内容mycommand?是否mycommand获得了我开始运行它时的原始内容,或者它是否获得了随着我的修改而myfile修改的内容?myfile

答案1

这取决于mycommand做什么。如果它休眠 10 分钟然后开始读取其标准输入,它会看到您的修改(如果已经完成)。如果它第一次读取文件的一部分,然后修改该文件,然后它进行第二次读取,它将看到超出已读取点的更改。

另外,由于许多程序使用缓冲,当您认为您的命令只读取了 1 行时,它实际上可能读取了更多内容(“缓冲区已满”,通常为 8192 字节)。

但请注意,编辑程序经常会删除文件并重新创建包含更改的新文件。在这种情况下,您的程序仍将使用旧的已删除文件内容,并且看不到任何更改。这是因为当您打开文件时,文件名会转换为其对应的唯一“inode”,您不再需要文件名。如果有人删除该文件,只要仍有程序打开该文件,此 inode 就会继续存在。当使用相同文件名创建新文件时,它将获得不同的唯一 inode。

相关内容