是否有命令来识别当前shell的名称/类型,shell二进制文件的路径以及shell的版本?
我不需要所有这些,但我能得到的越多越好.
我想要的东西,有相同的感觉uname
,pwd
,whoami
.只是一个简单输出的普通实用程序.(到目前为止还没有出现:/)
ps
$ ps -o comm $$
COMM
-bash
Run Code Online (Sandbox Code Playgroud)
为什么-bash
不像其他一切那样完整的路径呢?与那里的破折号有什么关系?
Mal*_*ala 55
当前运行的shell的命令或路径存储在环境变量中$0
.要查看其价值,请使用:
echo $0
Run Code Online (Sandbox Code Playgroud)
这将输出您当前运行的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$
Run Code Online (Sandbox Code Playgroud)
该$SHELL
环境变量包含用户的首选外壳,不一定是当前运行的外壳.
如果您没有在shebang行中指定程序,我相信将使用/ bin/sh.不幸的是,我不相信有一种很好的可移植方式来确定那个shell是什么.
如果你在Linux上,你可以通过/proc
以下方式找到可执行路径:
$ readlink "/proc/$$/exe"
/bin/dash
Run Code Online (Sandbox Code Playgroud)
并获得可执行文件名称很容易ps $$
.
但这对shell的类型(除了通过已知shell的查找表)和版本(AFAICT,甚至没有办法从破折号获取版本)都无法帮助你
尝试($$是shell变量设置为处理shell的id):
ps -ef | grep $$
Run Code Online (Sandbox Code Playgroud)
或尝试这个(/ proc/self是shell的aloso进程id):
ps -ef | grep /proc/self
Run Code Online (Sandbox Code Playgroud)
关于"-bash" - 破折号意味着它的登录shell.再次键入bash,现在你会看到shell只是"bash"(没有破折号)
kch*_*kch -2
我想要有同样感觉的东西
uname
,,pwd
。whoami
只是一个具有简单输出的普通实用程序。
所以显然结论是我想要的工具不存在,并且没有简单的跨平台方法来解决这个问题。
这里的一些答案在 Linux 上工作得很好。