![grep: 출력 파일이기도 한데 입력 파일을 지우는 이유는 무엇입니까? [복사]](https://linux55.com/image/202496/grep%3A%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EA%B8%B0%EB%8F%84%20%ED%95%9C%EB%8D%B0%20%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A7%80%EC%9A%B0%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
상상하다:
$ 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
있습니까 ? (참조해 주세요grep
grep
inode
소스코드는 여기에/ 1377~1403행).
안타깝게도 t0.txt
결과적으로 콘텐츠가 손실됩니다.