실수로 스크립트 자체에서 서브쉘 번호(BASH_SUBSHELL)를 공개하고 싶었는데 서브쉘 0이 나왔습니다.
이것은 스크립트의 라인입니다
echo "Operated from subshell: $BASH_SUBSHELL
터미널의 쉘 출력의 일부
- echo '서브쉘에서의 작업: 0' 서브쉘에서의 작업: 0
질문스크립트 자체가 실행되는 하위 쉘을 표시할 수 있습니까?
답변1
스크립트가 하위 쉘에서 실행되지 않기 때문에 이 출력은 정확합니다. 하위 쉘은 괄호 ( ... )
, 컨텍스트 &
및 명령 대체를 포함한 몇 가지 방법을 통해 생성되지만 $( ... )
스크립트 시작을 통해서는 생성되지 않습니다. 이렇게 하면 스크립트를 실행하기 위한 완전히 새로운 쉘이 생성됩니다.
당신이 생각할 수 있는 것은SHLVL
변수, 어느하다스크립트(및 셸) 수준당 증분:
SHLVL
새로운 Bash 인스턴스가 시작될 때마다 1씩 증가합니다. 이는 Bash 쉘의 중첩 깊이를 계산하는 데 사용됩니다.
스크립트 줄이 다음과 같은 경우
echo "Operated from shell level: $SHLVL"
그러면 예상했던 결과를 얻을 수 있을 것입니다. 스크립트가 재귀적이면 $SHLVL
매번 증가됩니다.
답변2
실제로 일부 하위 지옥을 사용하는 코드는 다음과 같습니다.
echo "main shell: $BASH_SUBSHELL"
(
echo "first subshell: $BASH_SUBSHELL"
(
echo "second subshell: $BASH_SUBSHELL"
(
echo "third subshell: $BASH_SUBSHELL"
)
)
)