如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
Ps -p $$
应该在涉及ps -ef和grep的解决方案的任何地方工作(在任何支持POSIX选项的ps的Unix变体上),并且不会受到grepping对可能出现在其他地方的数字序列引入的误报的影响。
其他回答
$SHELL不需要总是显示当前SHELL。它只反映要调用的默认shell。
为了测试上面的测试,假设bash是默认shell,尝试echo $ shell,然后在同一终端,进入其他一些shell(例如KornShell (ksh))并尝试$ shell。在这两种情况下,您将看到结果为bash。
要获得当前shell的名称,使用cat /proc/$$/cmdline。和通过readlink /proc/$$/exe到shell可执行文件的路径。
你可以使用echo $SHELL|sed "s/\/bin\// g"
有许多方法可以找到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)
这个在Red Hat Linux (RHEL), macOS, BSD和一些aix上运行良好:
ps -T $$ | awk 'NR==2{print $NF}'
或者,如果pstree可用,下面的一个也应该工作,
pstree | egrep $$ | awk 'NR==2{print $NF}'
我对打印父进程的变体:
ps -p $$ | awk '$1 == PP {print $4}' PP=$$
当AWK可以为您运行不必要的应用程序时,不要运行它。