如何使用脚本获取shell的名称?

时间:2015-08-24 20:46:18

标签: linux bash shell

我想运行一个shell脚本来打印运行它的shell的名称。

到目前为止,我一直在使用echo $SHELL,但该变量可能未设置,并且未提供运行该脚本的当前shell的名称。

我已尝试使用ps -p $$但这仅在直接在终端中使用时有效,因为在脚本中它为我提供了脚本文件的名称。

我没有找到解决这个问题的好方法。

当前脚本:

#!/bin/bash
echo $SHELL

由于

编辑:以防万一,我的意思是我想通过使用脚本获取运行脚本的命令解释器的名称。

3 个答案:

答案 0 :(得分:1)

沿着这些方向做某些事情你想做什么吗?

me@server2:~$ cat test
#!/bin/sh
X=$(ps h -p $$ -o args='' | cut -f1 -d' ')
echo "Running --> $X"    

me@server2:~$ ./test
Running --> /bin/sh
me@server2:~$ sh test
Running --> sh
me@server2:~$ bash test
Running --> bash
me@server2:~$    

答案 1 :(得分:0)

经过一些测试,这似乎适用于linux:

gawk 'BEGIN{RS="\0"}; NR==1{print; exit}' /proc/$$/cmdline

需要非便携式gawk功能。

编辑:此处发生的事情的帐户

文件/ proc / PID / cmdline包含PID的完整命令行。 $$扩展为当前shell的PID。此文件包含完整命令行的空字节分隔列表。指示gawk分割NULL字节上的记录(“行”),并打印它遇到的第一个记录。

这会稍微短一些:

gawk 'BEGIN{RS="\0"}; {print; exit}' /proc/$$/cmdline

答案 2 :(得分:0)

您可以使用

stat -tc '%N' /proc/$$/exe | cut -d' ' -f3

获取运行脚本的shell的名称