파일로의 bash 리디렉션이 추가 모드에서 발생하는 이유

파일로의 bash 리디렉션이 추가 모드에서 발생하는 이유

이 조각을 보면:

exec 3>f
echo foo >&3
echo bar >&3
cat f # returns foo bar

bash가 f에 콘텐츠를 추가하는 이유는 무엇입니까? 내가 뭐 놓친 거 없니?

답변1

당신이 놓친 것은 f호출에서 파일을 한 번만 열고 자르는 것입니다 exec. 이 두 echo명령은 이미 열려 있는 파일 설명자에 쓰기만 하면 됩니다. 따라서 어떤 호출에서도 파일이 f잘리지 않습니다 echo.

표준 출력을 파일 설명자로 리디렉션하기 위한 구문은 파일 설명자를 나타내는 작은 양의 정수입니다(리디렉션 없음 >&n) . 이 작업을 수행하려면 파일 설명자가 이미 열려 있는 파일과 연결되어 있어야 합니다. 이것은n>>&n파일 열기 동작exec 3>f이를 잘린 파일의 설명자 와 연결합니다 ( exec 3>>f파일은 잘리지 않고 추가 모드에서 열립니다). 쓰기 전용을 사용하면 >&3파일이 열리지 않으며 파일이 잘리지도 않습니다.

그랬다면 상황이 달라졌을 텐데

echo foo >f
echo bar >f
cat f

(각각은 echo열리고 잘립니다 f.) 또는 더 복잡하게는

exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f

(파일은 exec각 파일 앞에 열리고 잘립니다 echo.)

관련 정보