从脚本本身中识别 shell 脚本的子 shell 编号

从脚本本身中识别 shell 脚本的子 shell 编号

我无意中想要从脚本本身中揭示子 shell 编号 (BASH_SUBSHELL),但我得到了 subshel​​l 0

这是脚本的行

echo "Operated from subshell: $BASH_SUBSHELL

终端中 shell 的部分输出

  • echo '从子shell操作:0' 从子shell操作:0

问题是否有可能显示脚本本身正在运行的子 shell?

答案1

由于脚本不在子 shell 中运行,因此此输出是正确的。子 shell 是通过一些东西创建的,包括括号( ... )、背景&和命令替换$( ... ),但不是通过启动脚本创建的:这会创建一个全新的 shell 来执行脚本。

你可能想到的是变量SHLVL, 哪个每层脚本(和 shell)的增量:

SHLVL每次启动新的 Bash 实例时加一。这是为了计算 Bash shell 的嵌套深度。

如果你的脚本行是

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"
        )
    )
)

相关内容