`cat foo | sed 's/bar/qux/'` > foo`는 왜 foo의 내용을 삭제합니까? [복사]

`cat foo | sed 's/bar/qux/'` > foo`는 왜 foo의 내용을 삭제합니까? [복사]
$ 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아무런 효과가 없습니다.

관련 정보