C'è un caso in cui la tua shell non ha un parametro della riga di comando per determinare direttamente la versione. Questo caso è Bourne shell. Per Bourne shell consiglierei di utilizzare uno script:https://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh. Lo script è piuttosto piccolo, quindi non è un grosso problema rivederlo e capire come funziona. Ho testato questo script all'interno di diverse shell su Linux e Solaris e mi ha sempre fornito la versione della shell.
Alcuni esempi:
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
Questa è anche la risposta alla domanda sulla versione della shell Bourne che è stata contrassegnata come fuori tema.
Basta usare il comando
echo $BASH_VERSION
Deve darti la versione di shell. BASH_VERSION è la variabile d'ambiente che contiene la versione della shell.
Dipende se si desidera conoscere la versione della shell di login predefinita o la versione della shell attualmente in esecuzione. Non sono necessariamente gli stessi.
Per la tua shell di login predefinita, come dice la risposta accettata, $SHELL --version
è probabile che funzioni. La maggior parte delle shell (ma non tutte) accetta un --version
opzione. (dash
non.) E questo presuppone che il valore di $SHELL
non è stato modificato (possono esserci validi motivi per farlo).
Per la shell attualmente in esecuzione, se capita che sia bash
puoi digitare:
echo $BASH_VERSION
Per tcsh
:
echo $version
Per zsh
:
echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
Per ksh
:
echo $KSH_VERSION
Per fish
:
echo $version
Di nuovo, questo presuppone che la variabile rilevante non sia stata modificata (raramente c'è un motivo non dannoso per cambiarla).
Bash in particolare ha una variabile array $BASH_VERSINFO
che fornisce più informazioni in un formato più facile da elaborare a livello di codice. Stampa $BASH_VERSINFO
stampa solo il primo elemento; per stampare tutti gli elementi:
echo "${BASH_VERSINFO[@]}"
Questo lo farà:
$SHELL --version
Nel mio caso, l'output è:
zsh 5.0.2 (x86_64-pc-linux-gnu)