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

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

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


当前回答

我想到了这个:

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

其他回答

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

Try

ps -p $$ -oargs=

or

ps -p $$ -ocomm=

不需要从"ps"的输出中Grepping PID,因为你可以从/proc目录结构中读取任何PID的相应命令行:

echo $(cat /proc/$$/cmdline)

然而,这可能并不比简单地:

echo $0

关于运行一个与名称不同的shell,一个想法是使用之前获得的名称从shell请求版本:

<some_shell> --version

sh似乎失败的退出码2,而其他人给出一些有用的(但我无法验证所有,因为我没有他们):

$ sh --version
sh: 0: Illegal option --
echo $?
2

你可以使用echo $SHELL|sed "s/\/bin\// g"

Ps -p $$

应该在涉及ps -ef和grep的解决方案的任何地方工作(在任何支持POSIX选项的ps的Unix变体上),并且不会受到grepping对可能出现在其他地方的数字序列引入的误报的影响。