Як знайти версію bash, яку я запускаю?


161

(навчання баш) Я намагався перевірити версію bash, тому я набрав /bin/bash -v.

Це виводило на екран цілу багато тексту (вміст .bashrc та інших файлів, що надходять з нього).

Чи можу я щось викрутити (наприклад, перезаписати деякі конфігураційні файли / встановити неправильні змінні середовища тощо) завдяки цій команді?

Я також не можу знайти документацію щодо того, для чого призначений -vперемикач.


Якщо ви запустили, bash -vви викликали нову оболонку bash з активованим режимом багатослідування, тож ви побачите багатослівний вихід для подальших команд (у мінімальному ступені ви побачите printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Щоб закінчити багатослівність, введіть exitкоманду - ви повернетесь до оригінальної неверболозної оболонки bash (або будь-якої оболонки, в якій ви знаходилися).
ADTC

Відповіді:


165

-vПараметр Баша означає багатослівний, і інструктує Баш роздрукувати стільки інформації , скільки можливо про те, що вона робить. При запуску він роздрукує всю конфігурацію, в якій він читає.

Щоб роздрукувати інформацію про версію для bash, використовуйте bash --version.


Чудово! Я також знайшов список вимикачів для bash .
Забба

33
Крім того, якщо ви вже використовуєте bash shell, ви можете вивести вміст спеціальної змінної BASH_VERSION. echo "$BASH_VERSION". Існує також спеціальний масив (BASH_VERSINFO), що містить кожен номер версії в окремих елементах. 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
друкарня, має бути щось на кшталт [ "${BASH_VERSINFO}" -lt 4 ]або[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh

Занадто багатослівний, набагато простіший з askubuntu.com/a/899187/1004
sorin

Проблема з цим методом полягає в тому, що ви не можете бути на 100% впевнені в тому, що будь-який скрипт, символічне посилання або будь-який інший тип конфігурації безладу, який змінив будь-яку змінну середовища при вході в систему. Як я відповів нижче, Ctrl + x Ctrl + v покаже точну версію bash, яку ви зараз працюєте, незалежно від будь-якої змінної середовища.
vegatripy

98

Під час запуску bash (наприклад, від gnome-terminal) ви можете перевірити значення BASH_VERSIONзмінної середовища.

$ echo $BASH_VERSION
4.2.37(1)-release

Якщо значення порожнє, ви не працюєте bash.


11
Це краще, ніж просто запускати bash --version, тому що це підтверджує, що ви зараз працюєте з bash, а не тільки з тим, що у вашій системі встановлений bash.
Flimm

1
+1 bash --versionне показує баш, який ви зараз використовуєте.
Габейо

Остерігайся: набір BASH_VERSIONне гарантує, що ти працюєш bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell'тому $BASH_VERSIONможе бути встановлено cshтакож
Tino

@Tino добре, ви можете зробити це $SHELL --version, але знову SHELL може бути перезаписаний (і всі оболонки не підтримують прапор --version).
bufh

37

Існує ключовий ярлик, який дає змогу відображати поточну інформацію оболонки:

Ctrl+ x Ctrl+v

З man bash

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

Це найкращий вибір, якщо ви заблукали зі змінними середовища.



1

Звичайний --versionможе дати вам занадто багатолінійну котельну плиту, так що я використовую

bash -c 'echo $BASH_VERSION'

Дублікат відповіді Павла
wjandrea

4
@wjandrea Це відрізняється від відповіді Павла Надольського . Він виконує команду в новій bashоболонці. Один із способів, яким це корисно, це те, що йому не потрібна оболонка, яка використовується в даний час bash. Інше полягає в тому, що навіть у bash, можна встановити інше значення (хоча і не добре ) BASH_VERSION. Він навіть може бути експортований як змінна середовище. Однак навіть після запуску export BASH_VERSION=foobarметод, наведений тут, працює, оскільки нова bashоболонка BASH_VERSIONавтоматично скидає свою власну, перш ніж виконувати розширення параметра, який її читає.
Елія Каган

@EliahKagan, у моїй оновленій та оновленій встановленій системі 16.04 LTS, встановленій із ISO-файлу 16.04.1, bash --versionйдеться 4.3.48(1)-releaseі apt-cache policy bashкаже, 4.3-14ubuntu1.2і я перевірив, що виконуваний bashфайл надходить із пакету "bash". Як це слід тлумачити? Існує аналогічна невідповідність usb-creator-gtk, і в такому випадку вихід apt-кеша є правильним. - Чи можна зробити висновок, що вищий номер версії є правильним (а хтось забув оновити інший)?
sudodus

1
@sudodus Номер версії програми може відрізнятися від номера версії пакету APT, до якого він входить. Це те, що ви бачите тут. 4.3.48...це версія Bash, 4.3-14...це версія bashпакета.
wjandrea

@EliahKagan я забув згадати раніше, дякую, що мене виправили! Я ціную знання.
wjandrea

0

Щоб отримати лише версію, а не багаторядковий текст:

$ bash --version | head -1 | cut -d ' ' -f 4
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.