Meskipun senang mengetahui bahwa mungkin untuk mengkompilasi versi sewenang-wenang dari bash secara lokal (seperti yang dibahas dalam jawaban saya yang lain), hari ini ada opsi yang jauh lebih sederhana - Docker resmi bash
gambar.
Untuk menguji skrip terhadap beberapa versi bash seringkali sesederhana:
for v in 3 4 5; do # or whatever versions you're interested in
docker run -v "$PWD:/mnt" "bash:$v" \
bash /mnt/your_script.sh
done
Akhirnya kembali ke pertanyaan ini, cukup mudah untuk mengkompilasi (tanpa menginstal) versi bash yang Anda minati. Inilah cara saya menguji Bash 3.2.57:
$ mkdir ~/bash
$ cd ~/bash
$ wget http://ftp.gnu.org/gnu/bash/bash-3.2.57.tar.gz
$ tar xvzf bash-3.2.57.tar.gz
$ cd bash-3.2.57
$ ./configure
$ make
# if `make` fails due to yacc, run `sudo apt-get install byacc`
# No need to run `make install`
$ ./bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Sekarang Anda memiliki biner bash 3.2.57 yang dapat Anda jalankan, tanpa benar-benar "menginstal" atau memodifikasi lingkungan normal Anda.
Untuk menjalankan skrip shell terhadap versi ini:
$ ./bash your_script.sh
Untuk memasukkan permintaan interaktif bersih:
$ env -i PATH="$PWD:$PATH" ./bash --noprofile --norc
bash-3.2$ bash -version
GNU bash, version 3.2.57(1)-release (armv7l-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
bash-3.2$
Menggunakan env -i
daripada hanya memanggil ./bash
langsung meninggalkan Anda dengan lingkungan yang sebagian besar kosong (jalankan env
dari dalam cangkang untuk melihat apa yang masih terpasang). Memperbarui PATH
memungkinkan panggilan ke bash
(misalnya bash -version
) untuk memanggil bash shell lokal, bukan instalasi seluruh sistem (tetapi perhatikan ini menarik seluruh PATH Anda). Menambahkan --noprofile --norc
menghindari memuat .bashrc
Anda dan skrip terkait.
Jika Anda tidak ingin mengambil PATH
apa pun modifikasi, jalankan saja export PATH="$PWD:$PATH"
sekali di dalam subkulit alih-alih sebagai bagian dari env
perintah.
Saya memiliki gambar Docker (repo) menggunakan langkah-langkah instalasi ini, jika itu berguna untuk referensi orang. Saya tidak menyarankan untuk menggunakan gambar ini secara langsung, tetapi Anda boleh menyalin dari skrip Dockerfile/instal. Berlisensi MIT.
Lihat shenv:https://github.com/shenv/shenv. Sama seperti rbenv, pyenv, goenv, dan lainnya, tetapi untuk shell, ini memungkinkan Anda menginstal berbagai versi Bash antara lain (zsh, fish, yash, dll.).
(Penafian:Sayalah yang memotong pyenv menjadi shenv!)