如何使用linux命令查找我的shell版本?

sag*_*ago 19 linux shell

我想知道使用Linux命令的shell版本.我尝试了以下命令,但它显示了我所在的shell的类型.

命令:

echo $SHELL
Run Code Online (Sandbox Code Playgroud)

结果:

/bin/bash
Run Code Online (Sandbox Code Playgroud)

Muh*_*lim 30

这样做:

$SHELL --version
Run Code Online (Sandbox Code Playgroud)

在我的例子中,输出是:

zsh 5.0.2 (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

  • 并非所有的shell都有`--version`选项,但更多的是没有,所以这可能是你最好的选择. (3认同)
  • 这反映了您的登录 shell——而不是当前运行的 shell。 (3认同)
  • 您所在的 shell 不一定与您的“$SHELL”变量匹配。使用“/proc/self/exe --version”。 (2认同)

Kei*_*son 10

这取决于您是否想知道默认登录shell的版本,或者您当前正在运行的shell的版本.他们不一定是一样的.

对于您的默认登录shell,正如接受的答案所说,$SHELL --version可能会起作用.大多数(但不是全部)炮弹接受一个--version选项.(dash不是.)这假设价值$SHELL没有改变(可能有正当理由这样做).

对于您当前正在运行的shell,如果恰好是bash您可以键入:

echo $BASH_VERSION
Run Code Online (Sandbox Code Playgroud)

用于tcsh:

echo $version
Run Code Online (Sandbox Code Playgroud)

用于zsh:

echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
Run Code Online (Sandbox Code Playgroud)

用于ksh:

echo $KSH_VERSION
Run Code Online (Sandbox Code Playgroud)

用于fish:

echo $version
Run Code Online (Sandbox Code Playgroud)

同样,这假设相关变量尚未被修改(很少有任何非恶意的原因来改变它).

Bash特别有一个数组变量$BASH_VERSINFO,它以一种更容易以编程方式处理的形式提供更多信息.

  • @HankB:`dash`似乎没有版本命令行选项或命令。在Debian或Ubuntu上,`dpkg -l dash`会告诉您安装了哪个版本,但不一定告诉您正在运行的版本。 (2认同)

Ale*_*lov 5

有一种情况,您的 shell 没有命令行参数来直接确定版本。这个案例是Bourne shell。对于 Bourne shell,我建议使用脚本:https : //www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh。该脚本非常小,因此查看它并了解它是如何工作的并不是什么大问题。我已经在 Linux 和 Solaris 上的不同 shell 中测试了这个脚本,它总是为我提供 shell 版本。

一些例子:

Ubuntu 18.04

$ sh -c './whatshell.sh'
ash (Busybox 1.x)
$ bash -c './whatshell.sh'
bash 4.4.19(1)-release
Run Code Online (Sandbox Code Playgroud)

CentOS 4

$sh -c './whatshell.sh'
bash 3.00.15(1)-release
Run Code Online (Sandbox Code Playgroud)

Solaris 10

~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88i (posix octal base)
~> bash -c './whatshell.sh'
bash 4.1.7(3)-release
~> csh -c './whatshell.sh' 
SVR4 Bourne shell (SunOS 5 variant)
Run Code Online (Sandbox Code Playgroud)

AIX 6.1

~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88f
~> bash -c './whatshell.sh'
bash 4.2.0(1)-release
Run Code Online (Sandbox Code Playgroud)

这也是被标记为题外话的Bourne shell version问题的答案。