현재 디렉터리에 이름이 지정된 파일이 있고 abc
여기에 일부 텍스트가 포함되어 있다고 가정합니다. 명령을 실행할 때:
cat abc > abc
파일 내용이 abc
사라지는 이유는 무엇입니까?
명령이 텍스트를 삭제하고 파일이 빈 파일이 되는 이유는 무엇입니까?
답변1
일이 이루어지는 순서 때문입니다.
이 작업을 수행할 때:
cat abc > abc
>
출력 리디렉션 연산자입니다. 쉘이 이를 발견하면 O_TRUNC
ie 플래그를 사용하여 자르기 모드로 파일을 열므로 파일의 모든 내용이 사라집니다. 이 리디렉션은 명령이 실행되기 전에 셸에 의해 먼저 수행됩니다.open(2)
open("abc", O_TRUNC)
cat
따라서 명령이 cat abc
실행되면 파일이 abc
잘려서 cat
파일이 비어 있는 것으로 나타납니다.
답변2
에 추가하다@heemayl의 답변, 일이 발생하는 순서에 대해 코드를 더 명확하게 하려면 명령 시작 부분에 리디렉션을 넣으면 됩니다.
> abc cat abc