¿Cómo encuentro la versión de bash que estoy ejecutando?

161

(aprendiendo bash) Estaba tratando de verificar la versión de bash, así que escribí /bin/bash -v.

Eso generó una gran cantidad de texto en la pantalla (el contenido de .bashrc y otros archivos provenientes de él).

¿Podría haber arruinado algo (como sobrescribir algunos archivos de configuración / establecer variables de entorno incorrectas, etc.) debido a ese comando?

Tampoco puedo encontrar documentación sobre para qué -vsirve el interruptor.

Zabba
fuente
Si ejecutó bash -v, invocó un nuevo shell bash con el modo detallado activado, por lo que verá una salida detallada para más comandos (como mínimo verá printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Para finalizar la verbosidad, escriba exitcommand: volverá al shell de bash no detallado (o al shell en el que se encontraba).
ADTC

Respuestas:

165

El -vparámetro para bash significa detallado y le indica a bash que imprima tanta información como sea posible sobre lo que está haciendo. Al inicio, imprimirá toda la configuración en la que está leyendo.

Para imprimir la información de versión para bash, use bash --version.

Jamal Fanaian
fuente
¡Excelente! También encontré la lista de interruptores para bash .
Zabba
33
Alternativamente, si ya está ejecutando un shell bash, puede generar el contenido de la variable especial BASH_VERSION. echo "$BASH_VERSION". También hay una matriz especial (BASH_VERSINFO) que contiene cada número de versión en elementos separados. 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
error tipográfico, debería ser algo como [ "${BASH_VERSINFO}" -lt 4 ]o[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh
Demasiado prolijo, mucho más fácil con askubuntu.com/a/899187/1004
Sorin
El problema con este método es que no puede estar 100% seguro de que cualquier script, enlace simbólico o cualquier otro tipo de configuración desordenada haya cambiado cualquier variable de entorno al iniciar sesión. Como respondí a continuación, Ctrl + x Ctrl + v le mostrará exactamente la versión bash que está ejecutando actualmente, independientemente de cualquier variable de entorno.
vegatripy
98

Al ejecutar bash (por ejemplo, desde gnome-terminal) puede verificar el valor de BASH_VERSIONla variable de entorno.

$ echo $BASH_VERSION
4.2.37(1)-release

Si el valor está vacío, no está ejecutando bash.

Paweł Nadolski
fuente
11
Esto es mejor que solo ejecutar bash --version, porque confirma que actualmente está ejecutando bash, no solo que tiene instalado bash en su sistema.
Flimm
1
+1 bash --versionno muestra el bash que estás usando actualmente.
gabeio
Cuidado: Un conjunto BASH_VERSIONno asegura que está ejecutando bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell', por lo que $BASH_VERSIONse puede establecer en cshasí
Tino
@Tino bien, podrías hacer una $SHELL --version, pero nuevamente SHELL podría sobrescribirse (y todos los shell no admiten el indicador --version).
bufh
37

Hay un atajo de teclado que indica la información actual del shell para que aparezca:

Ctrl+ x Ctrl+v

De man bash

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

Esta es la mejor opción si ha tenido problemas con las variables de entorno.

vegatripy
fuente
8

No, todo está bien. De man bash:

   --verbose
          Equivalent to  -v.

Simplemente no es tan silencioso como de costumbre. Tratar

--version 

en lugar.

usuario desconocido
fuente
1

Lo habitual --versionpuede darle demasiado repetitivo de varias líneas, así que lo que estoy usando es

bash -c 'echo $BASH_VERSION'
sorin
fuente
Duplicado de la respuesta
wjandrea
44
@wjandrea Esto es diferente de la respuesta de Paweł Nadolski . Ejecuta el comando en un nuevo bashshell. Una forma en que esto es útil es que no necesita el shell que se usa actualmente bash. Otra es que, incluso en bash, es posible (aunque no es bueno ) establecer BASH_VERSIONun valor diferente. Incluso se puede exportar como una variable de entorno. Sin embargo, incluso después de la ejecución export BASH_VERSION=foobar, el método proporcionado aquí funciona, ya que el nuevo bashshell se restablece BASH_VERSIONautomáticamente antes de realizar la expansión de parámetros que lo lee.
Eliah Kagan
@EliahKagan, en mi sistema LTS 16.04 instalado y actualizado instalado desde el archivo iso 16.04.1, bash --versiondice 4.3.48(1)-releasey apt-cache policy bashdice 4.3-14ubuntu1.2y he comprobado que el basharchivo ejecutable proviene del paquete 'bash'. ¿Cómo se debe interpretar esto? Hay una falta de coincidencia similar para usb-creator-gtk, y en ese caso la salida de apt-cache es correcta. - ¿Podemos concluir que el número de versión superior es el correcto (y alguien olvidó actualizar el otro)?
sudodus
1
@sudodus El número de versión de un programa puede ser diferente del número de versión del paquete APT en el que viene. Eso es lo que está viendo aquí. 4.3.48...es la versión de Bash, 4.3-14...es la versión del bashpaquete.
wjandrea
@EliahKagan Olvidé mencionar antes, ¡gracias por corregirme! Agradezco el conocimiento.
wjandrea
0

Para obtener solo la versión y no el texto multilínea:

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