如何确定我正在使用的当前shell ?

仅仅ps命令的输出就足够了吗?

如何在不同风格的Unix中实现这一点?


当前回答

在Mac OS X(和FreeBSD)上:

ps -p $$ -axco command | sed -n '$p' 

其他回答

使用$SHELL环境变量获取它。简单的sed可以删除路径:

echo $SHELL | sed -E 's/^.*\/([aA-zZ]+$)/\1/g'

输出:

bash

它在macOS、Ubuntu和CentOS上进行了测试。

在Mac OS X(和FreeBSD)上:

ps -p $$ -axco command | sed -n '$p' 

我特别喜欢Nahuel Fouilleul的解决方案,但我不得不在Ubuntu 18.04 (Bionic Beaver)上使用内置的Bash shell运行它的以下变体:

bash -c 'shellPID=$$; ps -ocomm= -q $shellPID'

没有临时变量shellPID,例如:

bash -c 'ps -ocomm= -q $$'

只会输出ps。也许你们不是都在使用非交互模式,这是有区别的。

Ps是最可靠的方法。SHELL环境变量不能保证被设置,即使设置了,也很容易被欺骗。

我想到了这个:

sed 's/.*SHELL=//; s/[[:upper:]].*//' /proc/$$/environ