심볼릭 링크 파일을 캡처하고 출력을 원본 파일로 리디렉션하면 후자의 파일이 비어 있는 이유는 무엇입니까?

심볼릭 링크 파일을 캡처하고 출력을 원본 파일로 리디렉션하면 후자의 파일이 비어 있는 이유는 무엇입니까?

재현하는 방법은 다음과 같습니다.

echo 'the original file' > orig
ln -s orig symb # now symb is symlinked to orig
cat symb > orig # this makes orig an EMPTY FILE, but why?

orig세 번째 명령 이후에는 빈 파일이 되는데, 왜 그럴까요?

답변1

파일을 열려고 하면 기호 링크가 평가됩니다. "정상적인" 상황에서 심볼릭 링크를 열면 해당 링크가 참조하는 파일이 열립니다. 그래서:

ln -s original_file my_symlink
cat my_symlink > original_file

다음과 매우 유사합니다:

cat original_file > original_file

콘텐츠가 왜 깨졌나요?

모든 셸에서 command > some_file먼저 열리고 잘립니다(0) some_file.그 다음에실행 command하고 결과를 작성합니다 some_file.

따라서 cat x > x쉘이 열리고 잘 x리면그 다음에 cat x열어서 읽을 것이다잘린파일 쓰기는 모두 0바이트입니다.

관련 정보