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

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

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


当前回答

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

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

输出:

bash

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

其他回答

echo $$ # Gives the Parent Process ID 
ps -ef | grep $$ | awk '{print $8}' # Use the PID to see what the process is.

你如何知道你当前的shell是什么?

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

有许多方法可以找到shell及其对应的版本。下面是一些对我有用的方法。

直截了当的

$> echo $0(给你程序名。在我的例子中,输出是-bash。) $> $SHELL(这将带您进入SHELL,并在提示符中获得SHELL名称和版本。在我的情况下bash3.2$。) $> echo $SHELL(这将给你可执行的路径。在我的情况下/bin/bash。) $> $SHELL——version(这将提供有关许可证类型的SHELL软件的完整信息)

独创性的方法

$> *******(输入一组随机字符,在输出中您将获得shell名称。在我的例子中-bash: chapter2-a-sample-isomorphic-app: command not found)

Try

ps -p $$ -oargs=

or

ps -p $$ -ocomm=

执行以下操作以了解您的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后重试。