设想:
$ 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
(发生错误),那么为什么要清除输入文件?
设想:
$ 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
(发生错误),那么为什么要清除输入文件?
shell 重定向首先发生;所以首先shell清空你的输出文件
t0.txt
然后它传递给grep
然后grep
抱怨输入和输出是相同的;grep 如何知道它们是相同的(?),因为它检查inode
输入和输出文件的编号(请参阅此处的源代码/第 1377~1403 行)。不幸的是,您
t0.txt
因此丢失了内容。