고양이 리디렉션

고양이 리디렉션

현재 디렉터리에 이름이 지정된 파일이 있고 abc여기에 일부 텍스트가 포함되어 있다고 가정합니다. 명령을 실행할 때:

cat abc > abc

파일 내용이 abc사라지는 이유는 무엇입니까?
명령이 텍스트를 삭제하고 파일이 빈 파일이 되는 이유는 무엇입니까?

답변1

일이 이루어지는 순서 때문입니다.

이 작업을 수행할 때:

cat abc > abc

>출력 리디렉션 연산자입니다. 쉘이 이를 발견하면 O_TRUNCie 플래그를 사용하여 자르기 모드로 파일을 열므로 파일의 모든 내용이 사라집니다. 이 리디렉션은 명령이 실행되기 전에 셸에 의해 먼저 수행됩니다.open(2)open("abc", O_TRUNC)cat

따라서 명령이 cat abc실행되면 파일이 abc잘려서 cat파일이 비어 있는 것으로 나타납니다.

답변2

에 추가하다@heemayl의 답변, 일이 발생하는 순서에 대해 코드를 더 명확하게 하려면 명령 시작 부분에 리디렉션을 넣으면 됩니다.

> abc cat abc

관련 정보