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

57
我想使用Linux命令了解我的shell版本。我尝试了下面的命令,但它显示的是我所在的shell类型。
命令:
echo $SHELL

结果:

/bin/bash

1
请注意,您可以使用一些奇怪的shell,甚至可以使用不符合POSIX标准的shell(例如fishes...)。您应该知道您正在使用哪个shell。如果是bash,确实尝试 bash --version。或者使用您的软件包管理系统(在Debian或Ubuntu上使用dpkg -l bash)。 - Basile Starynkevitch
4个回答

65

这将会完成它:

$SHELL --version

在我的情况下,输出结果为:

zsh 5.0.2 (x86_64-pc-linux-gnu)

8
并非所有的Shell都有--version选项,但大多数都有,因此这可能是你最好的选择。 - torek
我对此有一些异议,请参见我的回答 - Keith Thompson
5
你所使用的外壳程序不一定与 $SHELL 变量相匹配。请使用 /proc/self/exe --version 命令。 - x-yuri
3
这反映了您的登录 shell -- 而不是当前正在运行的 shell。 - dawg

20
这取决于您想知道默认登录 shell 的版本还是当前运行的 shell 的版本。它们不一定相同。
对于默认的登录 shell,正如所接受的答案所说,"$SHELL --version" 可能有效。大多数(但不是全部) shell 接受 "--version" 选项。("dash" 不接受。)这假设 "$SHELL" 的值没有被更改(可能有合法的原因更改)。
对于您当前正在运行的 shell,如果恰好是 "bash",则可以键入:
echo $BASH_VERSION

对于 tcsh

echo $version

对于 zsh

echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information

对于 ksh

echo $KSH_VERSION

对于fish

echo $version

再次强调,这假设相关变量没有被修改过(很少有非恶意的理由去更改它)。

特别地,Bash拥有一个数组变量$BASH_VERSINFO,提供了更多信息并以一种更易于程序处理的形式呈现。仅打印$BASH_VERSINFO将只打印第一个元素;要打印所有元素:

echo "${BASH_VERSINFO[@]}"

这是一个更好的答案。 - user5012123
1
/bin/sh或/bin/dash怎么样?(在Debian上,/bin/sh是符号链接到dash的。) - HankB
4
@HankB:dash似乎没有版本命令行选项或命令。在Debian或Ubuntu上,dpkg -l dash将告诉您安装的版本,但不一定是您正在运行的版本。 - Keith Thompson
Debian Buster上的/bin/dash包含字符串6323dd0fe3ec5af388e4ea4217a1f0092961d2.debug,看起来像是某种提交ID。这对应于Dash版本0.5.10.2-5。 - tripleee
@tripleee 看起來可能是,但十六進位字串比 git 提交 ID 短 2 個字符,在 https://git.kernel.org/pub/scm/utils/dash/dash.git 中沒有這樣的提交(或任何 ID 包含“6323dd0fe3ec5af388e4ea4217a1f0092961d2”的提交)。Ubuntu 20.04 也有 2a16ad1517b3d714e7b3bdb5470b2c82eb25ff.debug,同樣的情況。 - Keith Thompson

9
当你的shell没有命令行参数来直接确定版本时,有一种情况需要考虑,那就是Bourne shell。对于Bourne shell,我建议使用脚本:https://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh。这个脚本非常小,很容易检查并理解它的工作原理。我在Linux和Solaris上测试了这个脚本,并且它总是为我提供了shell版本。

以下是一些示例:

Ubuntu 18.04

$ sh -c './whatshell.sh'
ash (Busybox 1.x)
$ bash -c './whatshell.sh'
bash 4.4.19(1)-release

CentOS 4

$sh -c './whatshell.sh'
bash 3.00.15(1)-release

太阳能 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)

AIX 6.1

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

这也是对标记为离题的问题Bourne shell版本的答案。


1

只需使用命令

echo $BASH_VERSION

它将会给出您的shell版本。BASH_VERSION是包含shell版本的环境变量。


2
这显然只适用于运行Bash的情况。 - tripleee
3
运行命令 "ps -p $$"(不包括引号)以确定您正在使用哪个 shell。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接