![`cat foo | sed 's/bar/qux/'` > foo`는 왜 foo의 내용을 삭제합니까? [복사]](https://linux55.com/image/174599/%60cat%20foo%20%7C%20sed%20's%2Fbar%2Fqux%2F'%60%20%26gt%3B%20foo%60%EB%8A%94%20%EC%99%9C%20foo%EC%9D%98%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
$ cd /tmp
$ echo bar > foo
$ cat foo
bar
$ cat foo | sed 's/bar/qux/'
qux
$ cat foo | sed 's/bar/qux/' > foo
$ cat foo
마지막으로 cat foo
파일 내용이 삭제되었음을 표시합니다. 왜 그런 겁니까?
답변1
I/O 리디렉션은 > foo
명령을 실행하기 전에 셸에서 처리됩니다. 쉘은 foo
쓰기 위해 파일을 열고 이전 내용을 지운 다음 명령을 실행합니다. 귀하의 경우에는 cat foo | sed 's/bar/qux/'
빈 파일이 사용되므로 foo
아무런 효과가 없습니다.