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

Tim*_*Tim 2 io-redirection

  1. 此处不允许重定向。是cat不允许吗?但是重定向不是独立于运行它的任何命令吗?

    $ cat bk > bk
    cat: bk: input file is output file
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为什么以下重定向会清空文件:

    $ less  bk > bk
    
    Run Code Online (Sandbox Code Playgroud)

    awkless以与重定向类似的方式工作。awk是我真正发现问题的那个,而上面的例子毫无意义

一般来说,使用重定向的正确方法是什么?

Hau*_*ing 5

问题是输出重定向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)删除该文件的内容。