此处不允许重定向。是cat
不允许吗?但是重定向不是独立于运行它的任何命令吗?
$ cat bk > bk
cat: bk: input file is output file
Run Code Online (Sandbox Code Playgroud)为什么以下重定向会清空文件:
$ less bk > bk
Run Code Online (Sandbox Code Playgroud)
awk
也less
以与重定向类似的方式工作。awk
是我真正发现问题的那个,而上面的例子毫无意义
一般来说,使用重定向的正确方法是什么?
问题是输出重定向less
甚至在启动之前就杀死了文件:
open("file", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
close(3) = 0
execve("/usr/bin/less", ["less", "-WNS", "file"], [/* 102 vars */]) = 0
Run Code Online (Sandbox Code Playgroud)
正常的输出重定向会覆盖文件。在O_TRUNC
(见man 2 open
)删除该文件的内容。