确定当前外壳名称

Tyi*_*ilo 6 shell bash

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

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

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

Cal*_*leb 10

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

    几乎总有一个环境变量$SHELL可供您学习。有一些边缘情况会失败,特别是如果使用一个交互式 shell 来启动另一个。大多数最近的 shell 还以$BASH_VERSION或的形式设置了一个关于它们自己的变量$ZSH_VERSION。我不知道这样sh做。

  2. 有点发烧友:

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

  3. 更强大:

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