如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
$SHELL不需要总是显示当前SHELL。它只反映要调用的默认shell。
为了测试上面的测试,假设bash是默认shell,尝试echo $ shell,然后在同一终端,进入其他一些shell(例如KornShell (ksh))并尝试$ shell。在这两种情况下,您将看到结果为bash。
要获得当前shell的名称,使用cat /proc/$$/cmdline。和通过readlink /proc/$$/exe到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后重试。
$SHELL不需要总是显示当前SHELL。它只反映要调用的默认shell。
为了测试上面的测试,假设bash是默认shell,尝试echo $ shell,然后在同一终端,进入其他一些shell(例如KornShell (ksh))并尝试$ shell。在这两种情况下,您将看到结果为bash。
要获得当前shell的名称,使用cat /proc/$$/cmdline。和通过readlink /proc/$$/exe到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)
如果你只是想确保用户正在使用Bash调用脚本:
if [ -z "$BASH" ]; then echo "Please run this script $0 with bash"; exit; fi
或参考
if [ -z "$BASH" ]; then exec bash $0 ; exit; fi
我的解决方案:
ps -o command | grep -v -e "\<ps\>" -e grep -e tail | tail -1
这应该可以跨不同的平台和shell进行移植。它像其他解决方案一样使用ps,但它不依赖于sed或awk,并过滤掉管道和ps本身的垃圾,因此shell应该始终是最后一个条目。这样我们就不需要依赖不可移植的PID变量或选择正确的行和列。
我已经在Debian和macOS上用Bash、Z shell (zsh)和fish进行了测试(如果不专门为fish更改表达式,大多数解决方案都无法使用,因为它使用了不同的PID变量)。