동일한 파일로 리디렉션하면 파일이 잘리는 이유는 무엇입니까? 출력 대신 temp로 리디렉션됩니다. 그렇다면 동일한 파일

일반적으로 다른 파일을 사용하여 출력을 리디렉션합니다.

예를 들면 다음과 같습니다.

cat < first > temp

이 명령에서 first의 내용은 표준 출력 대신 temp로 리디렉션됩니다.

그렇다면 동일한 파일 이름을 사용하면 파일이 잘리는 이유는 무엇입니까?

왜 같은 파일을 덮어 쓸 수 없습니까?

cat < first > first 


답변

이와 같은 I / O 리디렉션을 사용 하면 명령이 실행 되기 전에 “입력”및 “출력”파일이 셸에서 열립니다 . 덮어 쓰기 위해 파일을 여는 것은 쓰기 전에 잘라내는 것과 같습니다. 결과 : cat입력시 빈 파일이 보입니다 …


답변

일반적인 경우에 처리하는 것은 매우 복잡하기 때문입니다. 다음 예제를 고려하십시오.

프로그램은 파일을 한 줄씩 읽고 각 줄을 두 번 출력합니다. 이제 두 번째 파일없이 (즉, 동일한 파일에서)이 작업을 수행하려면 프로그램은 읽을 수 있기 전에 덮어 쓰기 때문에 읽을 행의 대부분 (모든)을 버퍼링해야합니다.

문제를 간단한 프로그램으로 유지하려면 일반적으로 두 번째 임시 파일을 사용합니다.이 파일은 일단 완료되면 원래 파일 위로 이동합니다. 예를 들어 sed -i(인라인) 작동 방식입니다.


답변

일반적으로이 경우 경로 재 지정 구문은입니다 cat first > temp. 이는 cat의 출력이 first의 파일로 전송 됨을 의미합니다 temp. statement의 경우 cat < first > temp출력 cat이 다시 리디렉션 될 때 출력 이 완료되지 않았습니다. 결과는 아무것도 없습니다.

그러나 cat파일을 출력하고 다른 파일로 리디렉션 된 출력은 기본과 다르지 않습니다 cp.