如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
这个在Red Hat Linux (RHEL), macOS, BSD和一些aix上运行良好:
ps -T $$ | awk 'NR==2{print $NF}'
或者,如果pstree可用,下面的一个也应该工作,
pstree | egrep $$ | awk 'NR==2{print $NF}'
其他回答
一种方法是:
ps -p $$ -o exe=
在我看来,这比在另一个答案中使用-o args或-o comm更好(这些可能会使用一些符号链接,例如当/bin/sh指向某个特定的shell,如Dash或Bash)。
上面返回的是可执行文件的路径,但要注意,由于/usr-merge,可能需要检查多个路径(例如/bin/bash和/usr/bin/bash)。
还要注意,上面的文件并不完全与POSIX兼容(POSIX ps没有exe)。
$SHELL不需要总是显示当前SHELL。它只反映要调用的默认shell。
为了测试上面的测试,假设bash是默认shell,尝试echo $ shell,然后在同一终端,进入其他一些shell(例如KornShell (ksh))并尝试$ shell。在这两种情况下,您将看到结果为bash。
要获得当前shell的名称,使用cat /proc/$$/cmdline。和通过readlink /proc/$$/exe到shell可执行文件的路径。
echo $$ # Gives the Parent Process ID
ps -ef | grep $$ | awk '{print $8}' # Use the PID to see what the process is.
你如何知道你当前的shell是什么?
执行以下操作以了解您的shell是否使用Dash/Bash。
ls –la /bin/sh:
如果结果是/bin/sh -> /bin/bash ==>那么你的shell使用的是Bash。 如果结果是/bin/sh ->/bin/dash ==>那么你的shell使用的是dash。
如果你想从Bash更改为Dash或反之亦然,请使用下面的代码:
将shell更改为Bash
注意:如果上述命令导致错误提示/bin/sh已经存在,请删除/bin/sh后重试。
Ps是最可靠的方法。SHELL环境变量不能保证被设置,即使设置了,也很容易被欺骗。