Как мне найти версию bash, которую я использую?

161

(изучая bash) Я пытался проверить версию bash, поэтому набрал /bin/bash -v.

Это вывело на экран много текста (содержимое .bashrc и другие файлы из него).

Мог ли я что-то испортить (например, перезаписать некоторые файлы конфигурации / установить неправильные переменные окружения и т. Д.) Из-за этой команды?

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

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

Ответы:

165

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

Чтобы распечатать информацию о версии для bash, используйте bash --version.

Джамал Фанаян
источник
Большой! Я также нашел список переключателей для Bash .
Забба
33
В качестве альтернативы, если вы уже используете оболочку bash, вы можете вывести содержимое специальной переменной 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
Гейра
2
опечатка, должно быть что-то вроде [ "${BASH_VERSINFO}" -lt 4 ]или[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh
Слишком многословно, намного проще с askubuntu.com/a/899187/1004
сорин
Проблема с этим методом заключается в том, что вы не можете быть на 100% уверены, что какой-либо сценарий, символическая ссылка или любой другой вид испортит конфигурацию, которая изменила любую переменную среды при входе в систему. Как я ответил ниже, Ctrl + x Ctrl + v покажет вам версию bash, которую вы в данный момент используете, независимо от какой-либо переменной окружения.
вегатрипы
98

При запуске bash (например, from gnome-terminal) вы можете проверить значение BASH_VERSIONпеременной окружения.

$ echo $BASH_VERSION
4.2.37(1)-release

Если значение пусто, вы не работаете bash.

Павел Надольский
источник
11
Это лучше, чем просто запуск bash --version, потому что он подтверждает, что вы в настоящее время используете bash, а не только то, что bash установлен в вашей системе.
Flimm
1
+1 bash --versionне показывает bash, который вы используете в данный момент.
Габейо
Осторожно: набор BASH_VERSIONне гарантирует, что вы работаете bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell'так что $BASH_VERSIONможет быть установлен cshтакже
Tino
@Tino, вы могли бы сделать $SHELL --version, но снова SHELL может быть перезаписан (и все оболочки не поддерживают флаг --version).
Буф
37

Существует комбинация клавиш, которая дает указание текущей информации оболочки:

Ctrl+ x Ctrl+v

Из man bash

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

Это лучший выбор, если вы перепутали с переменными окружения.

vegatripy
источник
8

Нет, все в порядке. От man bash:

   --verbose
          Equivalent to  -v.

Это просто не так тихо, как обычно. Пытаться

--version 

вместо.

неизвестный пользователь
источник
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-cache верен. - Можем ли мы сделать вывод, что более высокий номер версии является правильным (а кто-то забыл обновить другой)?
Судод
1
@sudodus Номер версии программы может отличаться от номера версии пакета APT, в который она входит. Это то, что вы видите здесь. 4.3.48...это версия Bash, 4.3-14...это версия bashпакета.
wjandrea
@EliahKagan Я забыл упомянуть раньше, спасибо, что поправили меня! Я ценю знания.
wjandrea
0

Чтобы получить только версию, а не многострочный текст:

$ bash --version | head -1 | cut -d ' ' -f 4
Эяль Левин
источник