Es gibt einen Fall, in dem Ihre Shell keinen Befehlszeilenparameter hat, um die Version direkt zu bestimmen. Dieser Fall ist Bourne-Shell. Für die Bourne-Shell würde ich empfehlen, ein Skript zu verwenden:https://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh. Das Skript ist ziemlich klein, so dass es kein großes Problem darstellt, es zu überprüfen und zu verstehen, wie es funktioniert. Ich habe dieses Skript in verschiedenen Shells unter Linux und Solaris getestet und es gab immer die Shell-Version für mich.
Einige Beispiele:
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
Dies ist auch die Antwort auf die Frage Bourne-Shell-Version, die als Off-Topic markiert wurde.
Verwenden Sie einfach den Befehl
echo $BASH_VERSION
Es muss Ihnen die Version der Shell geben. BASH_VERSION ist die Umgebungsvariable, die die Version der Shell enthält.
Es hängt davon ab, ob Sie die Version Ihrer Standard-Login-Shell wissen möchten oder die Version der Shell, die Sie gerade ausführen. Sie sind nicht unbedingt gleich.
Für Ihre Standard-Login-Shell, wie die akzeptierte Antwort sagt, $SHELL --version
wird wahrscheinlich funktionieren. Die meisten (aber nicht alle) Shells akzeptieren einen --version
Möglichkeit. (dash
nicht.) Und dies setzt voraus, dass der Wert von $SHELL
wurde nicht geändert (es kann triftige Gründe dafür geben).
Für die Shell, die Sie gerade ausführen, wenn es zufällig bash
ist Sie können Folgendes eingeben:
echo $BASH_VERSION
Für tcsh
:
echo $version
Für zsh
:
echo $ZSH_VERSION
echo $ZSH_PATCHLEVEL # shows more detailed information
Für ksh
:
echo $KSH_VERSION
Für fish
:
echo $version
Dies setzt wiederum voraus, dass die relevante Variable nicht geändert wurde (es gibt selten einen nicht böswilligen Grund, sie zu ändern).
Insbesondere Bash hat eine Array-Variable $BASH_VERSINFO
Das gibt mehr Informationen in einer Form, die einfacher programmgesteuert verarbeitet werden kann. Drucken von $BASH_VERSINFO
druckt nur das erste Element; um alle Elemente zu drucken:
echo "${BASH_VERSINFO[@]}"
Dies wird es tun:
$SHELL --version
In meinem Fall lautet die Ausgabe:
zsh 5.0.2 (x86_64-pc-linux-gnu)