GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana saya bisa menguji skrip Bash saya pada versi Bash yang lebih lama?

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!)


Linux
  1. Bagaimana Cara Memeriksa Apakah Bash Dapat Mencetak Warna?

  2. Cara menguji skrip PHP

  3. Bagaimana saya bisa menjalankan fungsi dari skrip di baris perintah?

  1. Bisakah Skrip Bash Dihubungkan ke File?

  2. Bagaimana cara menjalankan skrip bash?

  3. Bagaimana bash menguji 'false'?

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Apakah Mungkin Meniru Versi Bash yang Lebih Lama?

  3. Bagaimana Cara Mengatur Parameter Saat Pipa Bash Script Ke Bash?