这个问题不同于在 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