Existuje případ, kdy váš shell nemá parametr příkazového řádku pro přímé určení verze. Tento případ je Bourne shell. Pro Bourne shell bych doporučil použít skript:https://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh. Skript je docela malý, takže není velký problém si ho prohlédnout a pochopit, jak funguje. Testoval jsem tento skript v různých shellech na Linuxu a Solarisu a vždy mi poskytl verzi shellu.
Několik příkladů:
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
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)
AIX 6.1
~> sh -c './whatshell.sh'
ksh88 Version (..-)11/16/88f
~> bash -c './whatshell.sh'
bash 4.2.0(1)-release
Toto je také odpověď na otázku verze Bourne shellu, která byla označena jako mimo téma.
Stačí použít příkaz
echo $BASH_VERSION
Musí vám poskytnout verzi shellu. BASH_VERSION je proměnná prostředí, která obsahuje verzi shellu.
Záleží na tom, zda chcete znát verzi výchozího přihlašovacího shellu nebo verzi shellu, který aktuálně používáte. Nejsou nutně stejné.
Pro váš výchozí přihlašovací shell, jak říká přijatá odpověď, $SHELL --version
pravděpodobně bude fungovat. Většina (ale ne všechny) shelly přijímá --version
volba. (dash
není.) A to předpokládá, že hodnota $SHELL
nebyl změněn (k tomu mohou existovat pádné důvody).
Pro shell, který právě používáte, pokud je to náhodou bash
můžete napsat:
echo $BASH_VERSION
Pro tcsh
:
echo $version
Pro zsh
:
echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
Pro ksh
:
echo $KSH_VERSION
Pro fish
:
echo $version
Opět to předpokládá, že příslušná proměnná nebyla změněna (zřídka existuje nějaký neškodlivý důvod ji měnit).
Zejména Bash má proměnnou pole $BASH_VERSINFO
který poskytuje více informací ve formě, kterou lze programově snáze zpracovat. Tisk $BASH_VERSINFO
vytiskne pouze první prvek; pro tisk všech prvků:
echo "${BASH_VERSINFO[@]}"
Udělá to:
$SHELL --version
V mém případě je výstup:
zsh 5.0.2 (x86_64-pc-linux-gnu)