如何检测我是否处于 subshel​​l、bash 和 ZSH 中?

如何检测我是否处于 subshel​​l、bash 和 ZSH 中?

这个问题不同于在 Bash 中,如何检测我是否处于子 shell 中?因为它不是特定于 shell 的。

假设我打开一个终端,它是zsh.我可以像这样深入探讨,

$ echo $$
359648
$ zsh
$ echo $$
359706
$ zsh
$ echo $$
359746
$ exit
$ echo $$
359706
$ exit
$ echo $$
359648

我希望第一次调用 时zsh能够意识到我们已经进入zsh并拒绝创建子 shell。当您碰巧在父 shell 中生成相同的 shell 时,意识到 shell 只是一个常规程序,而“子 shell”的概念只是一个基本抽象,这可能吗?

  • 是否可以检测到这种情况达到?
  • 是否可以检测到这种情况何时已经发生。

这个问题不具体针对zsh

答案1

像这样的事情怎么样

thisshell=$(ps -o comm= -p $$)
if [ $(ps -o comm= -p $(ps -o ppid= -p $$)) == "$thisshell" ]
then
   echo subshell
else
   echo not subshell or different shell
fi

相关内容