这里不允许重定向。是
cat
不允许吗?但是重定向不是独立于与其一起运行的任何命令吗?$ cat bk > bk cat: bk: input file is output file
为什么以下重定向会清空文件:
$ less bk > bk
awk
less
也以与重定向类似的方式工作。awk
是我实际发现问题的地方,而上面的例子毫无意义
一般来说,使用重定向的正确方法是什么?
答案1
问题是输出重定向在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
正常的输出重定向会覆盖该文件。O_TRUNC
(请参阅)man 2 open
删除文件内容。