是否有命令来识别当前shell的名称/类型,shell二进制文件的路径以及shell的版本?
我不需要所有这些,但我能得到的越多越好。
我想要的内容与uname
,pwd
,whoami
具有相同的感觉。只是一个简单输出的普通实用程序。 (到目前为止还没有出现:/)
ps
$ ps -o comm $$
COMM
-bash
为什么-bash
而不是其他所有内容的完整路径?与那里的破折号有什么关系?
答案 0 :(得分:55)
当前运行的shell的命令或路径存储在环境变量$0
中。要查看其值,请使用:
echo $0
这将输出当前正在运行的shell 或当前正在运行的shell的路径,具体取决于它的调用方式。可能需要一些处理:
prompt:~$ echo $0
/bin/bash
prompt:~$ sh
sh-4.0$ echo $0
sh
sh-4.0$ exit
exit
prompt:~$ /bin/sh
sh-4.0$ echo $0
/bin/sh
sh-4.0$
$SHELL
环境变量包含用户首选的shell,不一定是当前正在运行的shell。
答案 1 :(得分:7)
如果您没有在shebang行中指定程序,我相信将使用/ bin / sh。不幸的是,我不相信有一种很好的可移植方式来确定那个shell是什么。
如果你在Linux上,你可以通过/proc
找到可执行路径:
$ readlink "/proc/$$/exe"
/bin/dash
并通过ps $$
轻松获取可执行文件名称。
但是这对shell的类型(除了通过已知shell的查找表除外)和版本(AFAICT,甚至没有办法从破折号获取版本)都无法帮助你。
答案 2 :(得分:5)
尝试($$是shell变量设置为处理shell的id):
ps -ef | grep $$
或试试这个(/ proc / self是shell的aloso进程id):
ps -ef | grep /proc/self
关于“-bash” - dash表示它是登录shell。再次键入bash,现在您将看到shell只是“bash”(没有破折号)
答案 3 :(得分:2)
我认为'手指'是你正在寻找的合适人选。 试试这个命令:
finger `whoami`
答案 4 :(得分:1)
不是试图确定当前使用的shell,而是简单地重新执行所需的shell通常更合适。这可能只是一个历史性的解决方法,即没有可靠,可移植的方法来确定您当前使用的shell。最好的办法是编写脚本以尽可能多地使用shell,这样就不会出现问题。 (例如,可移植性很重要,无论有多少人想声称“bash无处不在”)
答案 5 :(得分:0)
您可以在Arch Linux中使用以下内容。
echo $SHELL
答案 6 :(得分:-1)
我想要的内容与
uname
,pwd
,whoami
具有相同的感觉。只是一个简单输出的普通实用程序。
显然,结论是我想要的工具不存在,并且没有简单的跨平台方法可以解决这个问题。
这里的一些答案在Linux上运行良好。
答案 7 :(得分:-1)
这显示了我更可靠的结果。
ls -la /bin/sh