答案1
快速而肮脏(并且可能是错误的):
几乎总有一个环境变量
$SHELL
可以让您了解这一点。在某些边缘情况下,此操作会失败,特别是在使用一个交互式 shell 启动另一个交互式 shell 的情况下。最近的 shell 还以$BASH_VERSION
或 的形式设置一个关于自身的变量$ZSH_VERSION
。我不知道sh
有这个作用有点花哨:
或者,大多数交互式 shell 都会知道它们是什么,并在您运行类似
echo $0
.这似乎依赖于与运行时获得的信息相同的信息ps -fp $$
,该信息将检索启动 ps 的进程的进程数据。更稳健:
对于某些没有方便的东西(例如设置环境变量)的 shell 和环境,一种可能有效的方法是从 proc 中提取您想要的数据,并找出正在运行的可执行文件路径实际上指向使用
readlink -f /proc/$$/exe
.这样做的好处是可以为您提供有关启动了哪些可执行文件的信息,即使它是指向其他内容的符号链接,在这种情况下,该SHELL
变量可能对您撒谎。