猫重定向

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会发现文件是空的。

  • 这会被检测到并被阻止。相反,文本`cat: filename: input file is output file`(其中`filename` 是您选择的文件名)打印在旧的标准输出上。 (3认同)
  • @TulsiKanodia - 这会导致无限循环。每次 cat 读取一行时,它都会在移动到下一行之前附加另一行。 (2认同)

l0b*_*0b0 5

添加到@heemayl 的回答中,如果您希望代码更清楚地了解事情发生的顺序,您可以简单地将 any 重定向放在命令的开头:

> abc cat abc
Run Code Online (Sandbox Code Playgroud)