모든 쉘 옵션이 스크립트에 의해 상속되지 않습니까?

모든 쉘 옵션이 스크립트에 의해 상속되지 않습니까?

set -x 쉘에서 스크립트를 실행한 다음 실행하면 옵션 세트가 set -x스크립트 내부에 아무런 영향을 미치지 않습니다.

모든 쉘 옵션이 스크립트에 의해 상속되지 않는지 궁금합니다.

bash 매뉴얼에서 언급된 내용을 찾지 못했습니다. 내가 찾은 유일한 관련 사항은 "달리 명시하지 않는 한 이러한 값은 셸에서 상속됩니다." 그래서 셸 옵션이 상속되는 것 같습니다. 제가 설명서에서 뭔가를 놓쳤나요?

내가 읽고관련된 질문스크립트가 쉘 옵션을 상속받게 만드는 방법을 묻습니다. 어떻게보다는 왜, 왜인지 궁금합니다.

감사해요.

내장 함수나 쉘 함수가 아닌 단순 명령을 실행하고자 하는 경우에는 다음과 같이 구성된 별도의 실행 환경에서 호출된다.달리 명시하지 않는 한 이러한 값은 셸에서 상속됩니다.

• 셸용 파일을 열고 명령으로 리디렉션하여 지정된 모든 수정 및 추가 사항을 엽니다.

• 현재 작업 디렉토리

• 파일 생성 모드 마스크

• 내보내기용으로 표시된 셸 변수 및 함수와 명령용으로 내보낸 변수는 환경에 전달됩니다(37페이지의 3.7.4절 [환경] 섹션 참조).

• 쉘이 포착한 트랩은 쉘의 상위로부터 상속된 값으로 재설정되고 쉘이 무시한 트랩은 무시됩니다. 이 별도의 환경에서 호출되는 명령은 쉘의 실행 환경에 영향을 미칠 수 없습니다.

답변1

의 경우 환경에 bash따라 다릅니다 .$SHELLOPTS

bash-4.4$ export SHELLOPTS
bash-4.4$ set -x
bash-4.4$ bash -c 'echo x'
+ bash -c 'echo x'
+ echo x
x

bash -c 'echo x'이 옵션을 상속하는 방법을 확인하세요 xtrace. shopt와 동일하지만 설정되는 옵션에 대한 $BASHOPTS변수가 있습니다.

xtracebash이는 스크립트(또는 스크립트를 실행하는 모든 명령 bash)와 bash재귀적으로 호출할 수 있는 다른 모든 스크립트 xtrace(해당 스크립트에서 아무 것도 수행되지 않는다고 가정 set +x)를 실행하려는 경우 디버깅 옵션으로 특히 유용합니다. 귀하가 그렇다면 sh다른 언어로 제작할 때와 마찬가지로 bash그들에게도 영향을 미칠 것입니다 .system("command line")

env SHELLOPTS=xtrace some-command

답변2

다음 옵션을 사용하여 명시적으로 스크립트(또는 명령줄이 있는 셸)를 호출할 수 있습니다.

shopt -s expand_aliases
alias shell_call='bash -$-'
shell_call /path/to/script

스크립트에 대한 변경 사항은 자동으로 서브셸에 전파됩니다. 그러나 이 방법은 기능만 활성화합니다.

관련 정보