Tul*_*dia 11 io-redirection files cat
假设abc
当前目录中存在一个名为的文件,其中包含一些文本。执行命令时:
cat abc > abc
Run Code Online (Sandbox Code Playgroud)
为什么文件的内容abc
消失了?
为什么命令删除里面的文字,文件变成空文件?
hee*_*ayl 27
因为做事的顺序。
当你这样做时:
cat abc > abc
Run Code Online (Sandbox Code Playgroud)
>
是输出重定向操作符,当 shell 看到它时,它会使用O_TRUNC
带有open(2)
ie 的标志以截断模式打开文件open("abc", O_TRUNC)
,因此文件中的任何内容都将消失。请注意,此重定向首先由 shell 在cat
命令运行之前完成。
所以当命令 cat abc
执行时,文件abc
已经被截断,因此cat
会发现文件是空的。
添加到@heemayl 的回答中,如果您希望代码更清楚地了解事情发生的顺序,您可以简单地将 any 重定向放在命令的开头:
> abc cat abc
Run Code Online (Sandbox Code Playgroud)