Jak znaleźć wersję uruchomionego basha?

161

(nauka bash) Próbowałem sprawdzić wersję bash, więc napisałem /bin/bash -v.

To spowodowało wyświetlenie dużej ilości tekstu na ekranie (zawartość .bashrc i innych pochodzących z niego plików).

Czy mogłem coś zepsuć (np. Zastąpić niektóre pliki konfiguracyjne / ustawić nieprawidłowe zmienne środowiskowe itp.) Z powodu tego polecenia?

Nie mogę również znaleźć dokumentacji dotyczącej tego, do czego -vsłuży przełącznik.

Zabba
źródło
Jeśli uruchomiłeś bash -v, wywołałeś nową powłokę bash z aktywnym trybem szczegółowym, więc zobaczysz pełne wyjście dla dalszych poleceń (przynajmniej zobaczysz printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Aby zakończyć gadatliwość, wpisz exitpolecenie - wrócisz do oryginalnej nie-gadatliwej powłoki bash (lub innej powłoki, w której byłeś).
ADTC

Odpowiedzi:

165

-vParametr dla bash oznacza rozwlekły i instruuje bash wydrukować jak najwięcej informacji o tym, co robi. Po uruchomieniu wydrukuje całą konfigurację, w której czyta.

Aby wydrukować informacje o wersji dla bash, użyj bash --version.

Jamal Fanaian
źródło
Wspaniały! Znalazłem też listę przełączników do bash .
Zabba
33
Alternatywnie, jeśli już korzystasz z powłoki bash, możesz wypisać zawartość specjalnej zmiennej BASH_VERSION. echo "$BASH_VERSION". Istnieje również specjalna tablica (BASH_VERSINFO) zawierająca każdy numer wersji w osobnych elementach. 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
literówka, powinno być coś w stylu [ "${BASH_VERSINFO}" -lt 4 ]lub[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh
Zbyt gadatliwy, o wiele łatwiejszy dzięki askubuntu.com/a/899187/1004
sorin
Problem z tą metodą polega na tym, że nie można mieć 100% pewności, że jakikolwiek skrypt, dowiązanie symboliczne lub jakakolwiek inna konfiguracja bałaganu, która zmieniła dowolną zmienną środowiskową podczas logowania. Jak odpowiedziałem poniżej, Ctrl + x Ctrl + v pokaże ci dokładnie wersję bash, którą aktualnie uruchomisz, bez względu na zmienną środowiskową.
vegatripy
98

Podczas uruchamiania bash (np. Z gnome-terminal) możesz sprawdzić wartość BASH_VERSIONzmiennej środowiskowej.

$ echo $BASH_VERSION
4.2.37(1)-release

Jeśli wartość jest pusta, nie jesteś uruchomiony bash.

Paweł Nadolski
źródło
11
Jest to lepsze niż zwykłe uruchamianie bash --version, ponieważ potwierdza, że ​​aktualnie uruchomisz bash, a nie tylko to, że masz zainstalowany bash w swoim systemie.
Flimm
1
+1 bash --versionnie pokazuje aktualnie używanego basha.
gabeio
UWAGA: Zestaw BASH_VERSIONnie gwarantuje, że używasz bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell', więc $BASH_VERSIONmogą być ustawione w cshtak dobrze
Tino
@Tino dobrze, możesz zrobić $SHELL --version, ale znowu SHELL może zostać nadpisany (i wszystkie powłoki nie obsługują flagi --version).
bufh
37

Istnieje skrót klawiszowy, który wyświetla aktualne informacje o powłoce:

Ctrl+ x Ctrl+v

Od man bash

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

To najlepszy wybór, jeśli pomieszałeś ze zmiennymi środowiskowymi.

vegatripy
źródło
8

Nie, wszystko jest w porządku. Od man bash:

   --verbose
          Equivalent to  -v.

Po prostu nie jest tak cicho jak zwykle. Próbować

--version 

zamiast.

nieznany użytkownik
źródło
1

Zwykle --versionmoże dać ci zbyt wiele wielowierszowych płyt kotłowych, więc używam tego

bash -c 'echo $BASH_VERSION'
sorin
źródło
Duplikat odpowiedzi Pawła
wjandrea,
4
@wjandrea To różni się od odpowiedzi Pawła Nadolskiego . Uruchamia polecenie w nowej bashpowłoce. Jednym ze sposobów jest to użyteczne, ponieważ nie potrzebuje obecnie używanej powłoki bash. Innym jest to, że nawet w bash, możliwe jest (choć nie dobre ) ustawienie BASH_VERSIONinnej wartości. Może być nawet eksportowany jako zmienna środowiskowa. Jednak nawet po uruchomieniu export BASH_VERSION=foobarpodana tutaj metoda działa, ponieważ nowa bashpowłoka resetuje się BASH_VERSIONautomatycznie przed wykonaniem interpretacji parametru, który ją odczytuje.
Eliah Kagan,
@EliahKagan, w moim zaktualizowanym i zaktualizowanym systemie 16.04 LTS zainstalowanym z pliku ISO 16.04.1, bash --versionmówi 4.3.48(1)-releasei apt-cache policy bashmówi, 4.3-14ubuntu1.2i sprawdziłem, czy bashplik wykonywalny pochodzi z pakietu „bash”. Jak należy to interpretować? Występuje podobne niedopasowanie usb-creator-gtk, w takim przypadku dane wyjściowe apt-cache są poprawne. - Czy możemy stwierdzić, że wyższy numer wersji jest prawidłowy (i ktoś zapomniał zaktualizować drugi)?
sudodus
1
@sudodus Numer wersji programu może różnić się od numeru wersji pakietu APT, w którym się znajduje. To właśnie tutaj widzisz. 4.3.48...jest wersją Bash, 4.3-14...jest wersją bashpakietu.
wjandrea
@EliahKagan Zapomniałem wcześniej wspomnieć, dziękuję za poprawienie mnie! Doceniam tę wiedzę.
wjandrea
0

Aby uzyskać tylko wersję, a nie tekst wielowierszowy:

$ bash --version | head -1 | cut -d ' ' -f 4
Eyal Levin
źródło