echo >>regular_file 및 echo >>&fd: 하나는 닫혀 있고 다른 하나는 닫혀 있지 않습니다.

echo >>regular_file 및 echo >>&fd: 하나는 닫혀 있고 다른 하나는 닫혀 있지 않습니다.

내 관찰에 따르면 일반 파일에 에코하면 echo >>regular_file파일이 열리고 파일에 추가된 다음 파일이 닫힙니다. 그리고 열린 파일 설명자 echo >>&fd*에 에코하면 파일이 닫히지 않습니다. 이 동작이 bash/zsh 매뉴얼에 문서화되어 있습니까?

* 여기서 fd는 와 같은 숫자일 수 있습니다 3.

답변1

구문은 echo >>&fdPOSIX, Bash 또는 zsh에 의해 정의되지 않습니다 echo >&fd. 이는 두 작업 모두 파일 설명자 복사와 관련이 있지만 첫 번째 작업에는 지정된 파일을 먼저 여는 작업이 포함됩니다. ( fd 가 표준 출력인 echo >>regular_file와 동일 ) 쉘 에서 먼저 s를 수행하면 이 작업은 파일 설명자를 반환한 다음 반환된 fd를 표준 출력 fd에 연결하고 전자를 닫습니다. 명령 실행이 완료되면 fd가 "복원됩니다"(a가 생성된 경우 반드시 완료될 필요는 없지만 완료 방법에 관계없이 fd는 명령이 실행되기 전에 참조했던 동일한 파일을 참조합니다).echo 1>>regular_file1openregular_filedup11fork1

두 번째 명령 echo >&fd(역시 echo 1>&fd) 은 fdstdout에만 복사하고닫히지 않음fd. 다시 명령을 실행한 후 표준 출력을 복원합니다.

POSIX 쉘 명령 언어 및 기타 쉘에 문서화된 대로 첫 번째 작업을 리디렉션이라고 부르고 두 번째 작업을 파일 설명자 복사본이라고 부르는 것이 더 명확할 것입니다.

관련 정보