假设当前目录中存在一个名为 的文件abc
,并且其中包含一些文本。当你执行命令时:
cat abc > abc
为什么文件内容会abc
消失?
为什么命令删除了其中的文本,文件变成了空文件?
答案1
因为事情的完成顺序。
当你这样做时:
cat abc > abc
>
是输出重定向运算符,当 shell 看到它时,它会使用ieO_TRUNC
标志以截断模式打开文件,因此文件中的任何内容都将消失。请注意,此重定向是在命令运行之前首先由 shell 完成的。open(2)
open("abc", O_TRUNC)
cat
因此,当命令 cat abc
执行时,文件abc
已经被截断,因此cat
会发现文件为空。
答案2
添加到@heemayl 的回答,如果您希望代码更清楚地了解事情发生的顺序,您可以简单地将任何重定向放在命令的开头:
> abc cat abc