如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
如何确定我正在使用的当前shell ?
仅仅ps命令的输出就足够了吗?
如何在不同风格的Unix中实现这一点?
当前回答
Ps -p $$
应该在涉及ps -ef和grep的解决方案的任何地方工作(在任何支持POSIX选项的ps的Unix变体上),并且不会受到grepping对可能出现在其他地方的数字序列引入的误报的影响。
其他回答
这个在Red Hat Linux (RHEL), macOS, BSD和一些aix上运行良好:
ps -T $$ | awk 'NR==2{print $NF}'
或者,如果pstree可用,下面的一个也应该工作,
pstree | egrep $$ | awk 'NR==2{print $NF}'
不需要从"ps"的输出中Grepping PID,因为你可以从/proc目录结构中读取任何PID的相应命令行:
echo $(cat /proc/$$/cmdline)
然而,这可能并不比简单地:
echo $0
关于运行一个与名称不同的shell,一个想法是使用之前获得的名称从shell请求版本:
<some_shell> --version
sh似乎失败的退出码2,而其他人给出一些有用的(但我无法验证所有,因为我没有他们):
$ sh --version
sh: 0: Illegal option --
echo $?
2
请使用以下命令:
ps -p $$ | tail -1 | awk '{print $4}'
echo $$ # Gives the Parent Process ID
ps -ef | grep $$ | awk '{print $8}' # Use the PID to see what the process is.
你如何知道你当前的shell是什么?
Ps -p $$
应该在涉及ps -ef和grep的解决方案的任何地方工作(在任何支持POSIX选项的ps的Unix变体上),并且不会受到grepping对可能出现在其他地方的数字序列引入的误报的影响。