grep: 출력 파일이기도 한데 입력 파일을 지우는 이유는 무엇입니까? [복사]

grep: 출력 파일이기도 한데 입력 파일을 지우는 이유는 무엇입니까? [복사]

상상하다:

$ cat t0.txt
xxx

$ grep xxx t0.txt > t0.txt
grep: t0.txt: input file is also the output

# exit status 2

$ cat t0.txt
<nothing>

질문: 입력 파일도 출력이고 존재 상태가 2(오류 발생)인 경우 입력 파일을 지워야 하는 이유는 무엇입니까?

답변1

쉘 리디렉션이 먼저 발생하므로 먼저 쉘이 출력 파일을 비운 다음 입력과 출력이 동일하다고 불평합니다. grep은 입력 및 출력 파일 번호를 확인하기 때문에 둘이 동일하다는 것을 어떻게 알 수 t0.txt있습니까 ? (참조해 주세요grepgrepinode소스코드는 여기에/ 1377~1403행).

안타깝게도 t0.txt결과적으로 콘텐츠가 손실됩니다.

관련 정보