我想运行一个shell脚本来打印运行它的shell的名称。
到目前为止,我一直在使用echo $SHELL
,但该变量可能未设置,并且未提供运行该脚本的当前shell的名称。
我已尝试使用ps -p $$
但这仅在直接在终端中使用时有效,因为在脚本中它为我提供了脚本文件的名称。
我没有找到解决这个问题的好方法。
当前脚本:
#!/bin/bash
echo $SHELL
由于
编辑:以防万一,我的意思是我想通过使用脚本获取运行脚本的命令解释器的名称。
答案 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的名称