Come trovo la versione di bash che sto correndo?


161

(imparando bash) Stavo provando a controllare la versione bash così ho scritto /bin/bash -v.

Ciò ha prodotto un sacco di testo sullo schermo (contenuto di .bashrc e altri file provenienti da esso).

Avrei potuto rovinare qualcosa (come sovrascrivere alcuni file di configurazione / impostare variabili d'ambiente errate ecc.) A causa di quel comando?

Inoltre non riesco a trovare la documentazione su a cosa -vserva l' interruttore.


Se hai eseguito bash -vhai invocato una nuova shell bash con la modalità dettagliata attivata, quindi vedrai un output dettagliato per ulteriori comandi (come minimo vedrai printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Per terminare la verbosità, digita exitcommand - tornerai nella shell bash non verbosa originale (o in qualunque shell tu fossi).
ADTC

Risposte:


165

Il -vparametro per bash sta per verbose e indica a bash di stampare quante più informazioni possibili su ciò che sta facendo. All'avvio, stamperà tutta la configurazione in cui sta leggendo.

Per stampare le informazioni sulla versione per bash, utilizzare bash --version.


Grande! Ho anche trovato l' elenco degli switch per bash .
Zabba,

33
In alternativa, se stai già eseguendo una shell bash, puoi generare il contenuto della speciale variabile BASH_VERSION. echo "$BASH_VERSION". C'è anche un array speciale (BASH_VERSINFO) contenente ogni numero di versione in elementi separati. 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
errore di battitura, dovrebbe essere qualcosa di simile [ "${BASH_VERSINFO}" -lt 4 ]o[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh

Troppo dettagliato, molto più facile con askubuntu.com/a/899187/1004
sorin

Il problema con questo metodo è che non si può essere sicuri al 100% che qualsiasi script, collegamento simbolico o qualsiasi altro tipo di configurazione errata, che ha cambiato qualsiasi variabile di ambiente al momento dell'accesso. Come ho risposto di seguito, Ctrl + x Ctrl + v ti mostrerà esattamente la versione bash che stai attualmente eseguendo, indipendentemente da qualsiasi variabile d'ambiente.
Vegatripy,

98

Quando si esegue bash (ad es. Da gnome-terminal) è possibile verificare il valore della BASH_VERSIONvariabile di ambiente.

$ echo $BASH_VERSION
4.2.37(1)-release

Se il valore è vuoto, non si è in esecuzione bash.


11
Questo è meglio che semplicemente in esecuzione bash --version, perché conferma che stai attualmente eseguendo bash, non solo che hai installato bash sul tuo sistema.
Flimm,

1
+1 bash --versionnon mostra il bash che stai attualmente utilizzando.
gabeio

Attenzione: Un insieme BASH_VERSIONnon garantisce che si esegue bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell'così $BASH_VERSIONpuò essere impostato in cshcosì
Tino

@Tino bene, potresti fare un $SHELL --version, ma ancora SHELL potrebbe essere sovrascritto (e tutte le shell non supportano il flag --version).
bufh

37

Esiste una scorciatoia da tastiera che indica alle informazioni correnti della shell di essere visualizzate:

Ctrl+ x Ctrl+v

A partire dal man bash

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

Questa è la scelta migliore se hai fatto confusione con le variabili di ambiente.


8

No, va tutto bene. Da man bash:

   --verbose
          Equivalent to  -v.

Non è silenzioso come al solito. Provare

--version 

anziché.


1

Il solito --versionpuò darti troppa caldaia multilinea quindi quello che sto usando è

bash -c 'echo $BASH_VERSION'

Duplica della risposta
wjandrea,

4
@wjandrea Questo è diverso dalla risposta di Paweł Nadolski . Esegue il comando in una nuova bashshell. Un modo in cui è utile è che non ha bisogno della shell attualmente in uso bash. Un altro è che, anche in bash, è possibile (anche se non buono ) impostare BASH_VERSIONun valore diverso. Può anche essere esportato come variabile d'ambiente. Tuttavia, anche dopo l'esecuzione export BASH_VERSION=foobar, il metodo fornito qui funziona, poiché la nuova bashshell si ripristina BASH_VERSIONautomaticamente prima di eseguire l'espansione dei parametri che la legge.
Eliah Kagan,

@EliahKagan, nel mio sistema LTS 16.04 installato aggiornato e aggiornato installato dal file ISO 16.04.1, bash --versiondice 4.3.48(1)-releasee apt-cache policy bashdice 4.3-14ubuntu1.2e ho verificato che il bashfile eseguibile proviene dal pacchetto 'bash'. Come dovrebbe essere interpretato? Esiste una discrepanza simile per usb-creator-gtk, e in tal caso l'output di apt-cache è corretto. - Possiamo concludere che il numero di versione più alto è quello corretto (e qualcuno ha dimenticato di aggiornare l'altro)?
sudodus,

1
@sudodus Il numero di versione di un programma può essere diverso dal numero di versione del pacchetto APT in cui arriva. Ecco cosa vedi qui. 4.3.48...è la versione di Bash, 4.3-14...è la versione del bashpacchetto.
wjandrea,

@EliahKagan Ho dimenticato di menzionare prima, grazie per avermi corretto! Apprezzo la conoscenza.
wjandrea,

0

Per ottenere solo la versione e non il testo multilinea:

$ bash --version | head -1 | cut -d ' ' -f 4
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.