Wie finde ich die Version von Bash, die ich ausgeführt habe?

161

Ich habe versucht, die Bash-Version zu überprüfen, also habe ich getippt /bin/bash -v.

Dadurch wurde eine ganze Menge Text auf den Bildschirm ausgegeben (Inhalt von .bashrc und andere Dateien, die daraus stammen).

Könnte ich aufgrund dieses Befehls etwas vermasselt haben (wie das Überschreiben einiger Konfigurationsdateien / das Setzen falscher Umgebungsvariablen usw.)?

Ich kann auch keine Dokumentation darüber finden, wofür der -vSwitch gedacht ist.

Zabba
quelle
Wenn Sie ausgeführt haben, haben bash -vSie eine neue Bash-Shell mit aktiviertem Verbose-Modus aufgerufen, sodass Sie eine ausführliche Ausgabe für weitere Befehle erhalten (zumindest wird dies angezeigt printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Um die Ausführlichkeit zu beenden, geben Sie exitcommand ein - Sie befinden sich wieder in der ursprünglichen nicht ausführlichen Bash-Shell (oder in der Shell, in der Sie sich befanden).
ADTC

Antworten:

165

Der -vParameter für bash steht für verbose und weist bash an, so viele Informationen wie möglich zu drucken. Beim Start wird die gesamte eingelesene Konfiguration ausgedruckt.

Verwenden Sie, um die Versionsinformationen für bash auszudrucken bash --version.

Jamal Fanaian
quelle
Toll! Ich habe auch die Liste der Schalter für bash gefunden .
Zabba
33
Wenn Sie bereits eine Bash-Shell ausführen, können Sie alternativ den Inhalt der speziellen Variablen BASH_VERSION ausgeben. echo "$BASH_VERSION". Es gibt auch ein spezielles Array (BASH_VERSINFO), das jede Versionsnummer in separaten Elementen enthält. if ((BASH_VERSINFO[0] < 4)); then echo "Sorry, you need at least bash-4.0 to run this script." >&2; exit 1; fi
Geirha
2
Tippfehler, sollte so etwas wie [ "${BASH_VERSINFO}" -lt 4 ]oder sein[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh
Zu ausführlich, viel einfacher mit askubuntu.com/a/899187/1004
sorin
Das Problem bei dieser Methode ist, dass Sie nicht 100% ig sicher sein können, ob ein Skript, ein symbolischer Link oder eine andere Art von Versagenskonfiguration eine Umgebungsvariable bei der Anmeldung geändert hat. Wie ich unten beantwortet habe, zeigt Strg + x Strg + v Ihnen genau die Bash-Version, die Sie gerade ausführen, unabhängig von Umgebungsvariablen.
Vegatripy
98

Wenn Sie bash ausführen (z. B. from gnome-terminal), können Sie den Wert der BASH_VERSIONUmgebungsvariablen überprüfen .

$ echo $BASH_VERSION
4.2.37(1)-release

Wenn der Wert leer ist, werden Sie nicht ausgeführt bash.

Paweł Nadolski
quelle
11
Dies ist besser als nur zu laufen bash --version, da es bestätigt, dass Sie derzeit Bash ausführen, und nicht nur, dass Sie Bash auf Ihrem System installiert haben.
Flimm
1
+1 bash --versionzeigt nicht die Bash, die Sie gerade verwenden.
Gabeio
Hüten Sie sich vor: Ein Set BASH_VERSIONstellt nicht sicher , dass Sie ausgeführt werden bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell'so $BASH_VERSIONkann eingestellt werden , cshwie auch
Tino
@Tino Nun, Sie könnten eine machen $SHELL --version, aber SHELL könnte wieder überschrieben werden (und alle Shells unterstützen das Flag --version nicht).
Bufh
37

Es gibt eine Tastenkombination, mit der aktuelle Shell-Informationen angezeigt werden:

Ctrl+ x Ctrl+v

Von man bash

   display-shell-version (C-x C-v)
          Display version information about the current instance of bash.

Dies ist die beste Wahl, wenn Sie mit Umgebungsvariablen herumgespielt haben.

Vegatripie
quelle
8

Nein, alles ist in Ordnung. Von man bash:

   --verbose
          Equivalent to  -v.

Es ist einfach nicht so still wie sonst. Versuchen

--version 

stattdessen.

Benutzer unbekannt
quelle
1

Das übliche --versionkann Ihnen zu viel mehrzeiliges Boilerplate geben, also was ich benutze, ist

bash -c 'echo $BASH_VERSION'
Sorin
quelle
Duplikat von Pawels Antwort
wjandrea
4
@wjandrea Dies unterscheidet sich von der Antwort von Paweł Nadolski . Der Befehl wird in einer neuen bashShell ausgeführt. Eine Möglichkeit ist, dass die aktuell verwendete Shell nicht benötigt wird bash. Ein weiterer Grund ist, dass es sogar in bashmöglich (wenn auch nicht gut ) ist BASH_VERSION, einen anderen Wert festzulegen. Es kann sogar als Umgebungsvariable exportiert werden. Die export BASH_VERSION=foobarhier angegebene Methode funktioniert auch nach dem Ausführen , da die neue bashShell BASH_VERSIONautomatisch zurückgesetzt wird, bevor die Parametererweiterung ausgeführt wird, die sie liest.
Eliah Kagan
@EliahKagan, in meinem aktualisierten und aktualisierten installierten 16.04 LTS-System, das von der 16.04.1-ISO-Datei installiert wurde, bash --versionsagt 4.3.48(1)-releaseund apt-cache policy bashsagt, 4.3-14ubuntu1.2und ich habe geprüft, ob die ausführbare bashDatei aus dem Paket 'bash' stammt. Wie ist das zu interpretieren? Es gibt eine ähnliche Diskrepanz für usb-creator-gtk, und in diesem Fall ist die apt-cache Ausgabe korrekt ist . - Können wir daraus schließen, dass die höhere Versionsnummer die richtige ist (und jemand vergessen hat, die andere zu aktualisieren)?
Sudodus
1
@sudodus Die Versionsnummer eines Programms kann sich von der Versionsnummer des APT-Pakets unterscheiden, in dem es enthalten ist. Das sehen Sie hier. 4.3.48...ist die Version von Bash, 4.3-14...ist die Version des bashPakets.
wjandrea
@EliahKagan Ich habe vergessen zu erwähnen, danke, dass du mich korrigiert hast! Ich schätze das Wissen.
wjandrea
0

So erhalten Sie nur die Version und nicht den mehrzeiligen Text:

$ bash --version | head -1 | cut -d ' ' -f 4
Eyal Levin
quelle