确定当前外壳名称

确定当前外壳名称

可能的重复:
如何测试我在终端中使用的 shell?

如何确定当前 shell 路径或 shell 名称?

我只需要区分shbash,但是便携式解决方案会很好。

答案1

  1. 快速而肮脏(并且可能是错误的):

    几乎总有一个环境变量$SHELL可以让您了解这一点。在某些边缘情况下,此操作会失败,特别是在使用一个交互式 shell 启动另一个交互式 shell 的情况下。最近的 shell 还以$BASH_VERSION或 的形式设置一个关于自身的变量$ZSH_VERSION。我不知道sh有这个作用

  2. 有点花哨:

    或者,大多数交互式 shell 都会知道它们是什么,并在您运行类似echo $0.这似乎依赖于与运行时获得的信息相同的信息ps -fp $$,该信息将检索启动 ps 的进程的进程数据。

  3. 更稳健:

    对于某些没有方便的东西(例如设置环境变量)的 shell 和环境,一种可能有效的方法是从 proc 中提取您想要的数据,并找出正在运行的可执行文件路径实际上指向使用readlink -f /proc/$$/exe.这样做的好处是可以为您提供有关启动了哪些可执行文件的信息,即使它是指向其他内容的符号链接,在这种情况下,该SHELL变量可能对您撒谎。

相关内容