[duplicate] 명령으로 처리된 소스 파일과 동일한 파일로 리다이렉트

[duplicate] 명령으로 처리된 소스 파일과 동일한 파일로 리다이렉트
  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파일 내용을 삭제합니다.

관련 정보