猫重定向

猫重定向

假设当前目录中存在一个名为 的文件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

相关内容