스크립트 자체 내에서 셸 스크립트의 하위 셸 번호를 식별합니다.

스크립트 자체 내에서 셸 스크립트의 하위 셸 번호를 식별합니다.

실수로 스크립트 자체에서 서브쉘 번호(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"
        )
    )
)

관련 정보