Bash: 스크립트를 가져올 때 스크립트를 읽는 방법

Bash: 스크립트를 가져올 때 스크립트를 읽는 방법

Bash가 스크립트를 실행하면 ls -la /proc/<pid of bash>/fd"255 -> /path/to/script"가 표시됩니다. 나는 bash가 파일 설명자 255를 통해 스크립트를 읽고 명령을 한 줄씩 실행한다고 생각합니다.

그러나 bash가 스크립트를 받았을 때 나는 ls -la /proc/<pid of bash>/fd그것을 찾을 수 없습니다 cat /proc/<pid of bash>/maps.

질문이 있습니다. bash가 스크립트를 받으면 bash는 스크립트를 어떻게 읽나요? 스크립트 파일을 읽는 특별한 방법이 있나요?

답변1

문득 상황을 분석해 보고 싶은 생각이 떠올랐다 strace.

처음 실행하면 출력은 strace -f -p <pid>다음과 같습니다.

openat(AT_FDCWD, "./test", O_RDONLY) = 3

...

[pid 3408] dup2(3, 255) = 255

[pid 3408] 닫힘(3) = 0

"test"는 실행할 쉘 스크립트입니다. "3408"은 서브쉘의 pid입니다. "test"는 파일 설명자 3에서 열리고 파일 설명자 255에 복사됩니다. 따라서 ls -la /proc/<pid of bash>/fd"255 -> /some/directory/test"가 표시됩니다.

그러나 스크립트를 가져올 때 "test"가 열리고 버퍼로 읽혀진 다음 즉시 닫힙니다. 따라서 ls -la /proc/<pid of bash>/fd위와 같은 항목은 표시되지 않습니다.

bash가 왜 이런 식으로 구현하는지 모르겠습니다.

관련 정보