重定向到与命令处理的源文件相同的文件

重定向到与命令处理的源文件相同的文件
  1. 这里不允许重定向。是cat不允许吗?但是重定向不是独立于与其一起运行的任何命令吗?

    $ cat bk > bk
    cat: bk: input file is output file
    
  2. 为什么以下重定向会清空文件:

    $ less  bk > bk
    

    awkless也以与重定向类似的方式工作。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删除文件内容。

相关内容