grep:如果输入文件也是输出,那么为什么要清除输入文件?

grep:如果输入文件也是输出,那么为什么要清除输入文件?

设想:

$ cat t0.txt
xxx

$ grep xxx t0.txt > t0.txt
grep: t0.txt: input file is also the output

# exit status 2

$ cat t0.txt
<nothing>

问题:如果输入文件也是输出并且存在状态是2(发生错误),那么为什么要清除输入文件?

答案1

shell 重定向首先发生;所以首先 shell 清空你的输出文件,t0.txt然后它传递到grep然后grep抱怨输入和输出是相同的; grep 如何知道它们是相同的(?),因为它检查inode输入和输出文件的编号(请参阅源代码在这里/第1377~1403行)。

不幸的是,您t0.txt因此丢失了内容。

相关内容