여기에서는 리디렉션이 허용되지 않습니다. 허용되지 않나요
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
파일 내용을 삭제합니다.