Bagaimana cara menemukan versi bash yang saya jalankan?

161

(belajar bash) Saya mencoba memeriksa versi bash jadi saya mengetik /bin/bash -v.

Itu menghasilkan banyak teks ke layar (isi .bashrc, dan file lain yang bersumber dari itu).

Bisakah saya mengacaukan sesuatu (seperti menimpa beberapa file konfigurasi / pengaturan variabel lingkungan yang salah, dll.) Karena perintah itu?

Saya juga tidak dapat menemukan dokumentasi untuk apa -vsaklar itu.

Zabba
sumber
Jika Anda menjalankan bash -vAnda memanggil bash shell baru dengan mode verbose diaktifkan, sehingga Anda akan melihat output verbose untuk perintah lebih lanjut (setidaknya Anda akan melihat printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"). Untuk mengakhiri verbositas, ketikkan exitperintah - Anda akan kembali ke shell bash non-verbose asli (atau shell apa pun yang Anda gunakan).
ADTC

Jawaban:

165

The -vparameter untuk bash singkatan verbose, dan menginstruksikan bash untuk mencetak informasi sebanyak mungkin tentang apa yang dilakukannya. Pada startup, itu akan mencetak semua konfigurasi yang sedang dibaca

Untuk mencetak informasi versi untuk bash, gunakan bash --version.

Jamal Fanaian
sumber
Bagus! Saya juga menemukan daftar switch untuk bash .
Zabba
33
Atau, jika Anda sudah menjalankan bash shell, Anda dapat menampilkan konten variabel BASH_VERSION khusus. echo "$BASH_VERSION". Ada juga array khusus (BASH_VERSINFO) yang berisi setiap nomor versi dalam elemen terpisah. 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
salah ketik, harus seperti [ "${BASH_VERSINFO}" -lt 4 ]atau[ "${BASH_VERSINFO[0]}" -lt 4 ]
bufh
Terlalu verbose, lebih mudah dengan askubuntu.com/a/899187/1004
sorin
Masalah dengan metode ini adalah Anda tidak dapat 100% yakin bahwa skrip apa pun, tautan simbolik, atau jenis konfigurasi kacau apa pun lainnya, yang mengubah variabel lingkungan apa pun saat masuk. Seperti yang saya jawab di bawah, Ctrl + x Ctrl + v akan menunjukkan kepada Anda persis versi bash yang sedang Anda jalankan, terlepas dari variabel lingkungan apa pun.
vegatripy
98

Saat menjalankan bash (misalnya dari gnome-terminal) Anda dapat memeriksa nilai BASH_VERSIONvariabel lingkungan.

$ echo $BASH_VERSION
4.2.37(1)-release

Jika nilainya kosong, Anda tidak berjalan bash.

Paweł Nadolski
sumber
11
Ini lebih baik daripada hanya menjalankan bash --version, karena menegaskan bahwa Anda sedang menjalankan bash, bukan hanya bahwa Anda telah menginstal bash di sistem Anda.
Flimm
1
+1 bash --versiontidak menunjukkan pesta yang sedang Anda gunakan.
gabeio
Hati-hati: Satu set BASH_VERSIONtidak menjamin bahwa Anda sedang menjalankan bash: export BASH_VERSION; csh -c 'echo $BASH_VERSION $SHELL $shell', sehingga $BASH_VERSIONdapat ditetapkan dalam cshjuga
Tino
@Baiklah, Anda bisa melakukan $SHELL --version, tetapi sekali lagi SHELL mungkin akan ditimpa (dan semua shell tidak mendukung flag --version).
bufh
37

Ada pintasan kunci yang memerintahkan informasi shell saat ini muncul:

Ctrl+ x Ctrl+v

Dari man bash

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

Ini adalah pilihan terbaik jika Anda telah mengacaukan variabel lingkungan.

vegatripy
sumber
8

Tidak, semuanya baik-baik saja. Dari man bash:

   --verbose
          Equivalent to  -v.

Hanya saja tidak senyap seperti biasanya. Mencoba

--version 

sebagai gantinya.

Pengguna tidak diketahui
sumber
1

Biasa --versionmungkin memberi Anda terlalu banyak multi-line boilerplate jadi apa yang saya gunakan adalah

bash -c 'echo $BASH_VERSION'
Sorin
sumber
Duplikat jawaban Pawel
wjandrea
4
@wjandrea Ini berbeda dari jawaban Paweł Nadolski . Ini menjalankan perintah di bashshell baru . Salah satu cara ini bermanfaat adalah tidak perlu menggunakan shell saat ini bash. Lain adalah bahwa, bahkan dalam bash, dimungkinkan (meskipun tidak baik ) untuk menetapkan BASH_VERSIONnilai yang berbeda. Ia bahkan dapat diekspor sebagai variabel lingkungan. Namun bahkan setelah berjalan export BASH_VERSION=foobar, metode yang diberikan di sini berfungsi, karena bashshell baru me-reset sendiri BASH_VERSIONsecara otomatis sebelum melakukan ekspansi parameter yang membacanya.
Eliah Kagan
@EliahKagan, dalam sistem LTS 16.04 saya yang diperbarui & terinstal yang terinstal dari file iso 16.04.1, bash --versionmengatakan 4.3.48(1)-releasedan apt-cache policy bashberkata 4.3-14ubuntu1.2dan saya telah memeriksa bahwa bashfile yang dapat dieksekusi berasal dari paket 'bash'. Bagaimana ini harus ditafsirkan? Ada ketidakcocokan serupa untuk usb-creator-gtk, dan dalam hal itu keluaran apt-cache sudah benar. - Bisakah kita menyimpulkan bahwa nomor versi yang lebih tinggi adalah yang benar (dan seseorang lupa memperbarui yang lain)?
sudodus
1
@sudodus Nomor versi program dapat berbeda dari nomor versi paket APT yang dimilikinya. Itulah yang Anda lihat di sini. 4.3.48...adalah versi Bash, 4.3-14...adalah versi bashpaket.
wjandrea
@EliahKagan saya lupa sebutkan sebelumnya, terima kasih sudah mengoreksi saya! Saya menghargai pengetahuannya.
wjandrea
0

Untuk hanya mendapatkan versi dan bukan teks multiline:

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