如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
一种方法是:
ps -p $$ -o exe=
在我看来,这比在另一个答案中使用-o args或-o comm更好(这些可能会使用一些符号链接,例如当/bin/sh指向某个特定的shell,如Dash或Bash)。
上面返回的是可执行文件的路径,但要注意,由于/usr-merge,可能需要检查多个路径(例如/bin/bash和/usr/bin/bash)。
还要注意,上面的文件并不完全与POSIX兼容(POSIX ps没有exe)。
其他回答
我想到了这个:
sed 's/.*SHELL=//; s/[[:upper:]].*//' /proc/$$/environ
一种方法是:
ps -p $$ -o exe=
在我看来,这比在另一个答案中使用-o args或-o comm更好(这些可能会使用一些符号链接,例如当/bin/sh指向某个特定的shell,如Dash或Bash)。
上面返回的是可执行文件的路径,但要注意,由于/usr-merge,可能需要检查多个路径(例如/bin/bash和/usr/bin/bash)。
还要注意,上面的文件并不完全与POSIX兼容(POSIX ps没有exe)。
我有一个简单的技巧来找到当前的壳。只需输入一个随机字符串(这不是命令)。它将失败并返回一个“not found”错误,但在行开始时,它会说它是哪个shell:
ksh: aaaaa: not found [No such file or directory]
bash: aaaaa: command not found
在Mac OS X(和FreeBSD)上:
ps -p $$ -axco command | sed -n '$p'
echo $$ # Gives the Parent Process ID
ps -ef | grep $$ | awk '{print $8}' # Use the PID to see what the process is.
你如何知道你当前的shell是什么?