GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich mein Bash-Skript auf älteren Bash-Versionen testen?

Obwohl es schön ist zu wissen, dass es möglich ist, beliebige Versionen von Bash lokal zu kompilieren (wie in meiner anderen Antwort besprochen), gibt es heutzutage eine viel einfachere Option – den offiziellen Docker bash Bilder.

Ein Skript gegen mehrere Bash-Versionen zu testen ist oft so einfach wie:

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

Um abschließend auf diese Frage zurückzukommen:Es ist ziemlich einfach, die Bash-Version(en), an denen Sie interessiert sind, einfach zu kompilieren (ohne zu installieren). So teste ich 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.

Jetzt haben Sie eine Bash 3.2.57-Binärdatei, die Sie ausführen können, ohne sie tatsächlich zu "installieren" oder Ihre normale Umgebung zu ändern.

So führen Sie ein Shell-Skript für diese Version aus:

$ ./bash your_script.sh

So geben Sie eine saubere interaktive Eingabeaufforderung ein:

$ 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$ 

Mit env -i statt nur ./bash anzurufen hinterlässt direkt eine größtenteils leere Umgebung (führen Sie env aus aus dem Inneren der Schale, um zu sehen, was noch eingestellt ist). Aktualisieren von PATH erlaubt Aufrufe an bash (zB bash -version ), um die lokale Bash-Shell aufzurufen, nicht die systemweite Installation (beachten Sie jedoch, dass dies Ihren gesamten PATH einzieht). Hinzufügen von --noprofile --norc vermeidet das Laden Ihres .bashrc und zugehörige Skripte.

Wenn Sie keine PATH abholen möchten Änderungen führen Sie einfach export PATH="$PWD:$PATH" aus einmal innerhalb der Subshell statt als Teil von env Befehl.

Ich habe ein Docker-Image (Repo), das diese Installationsschritte verwendet, falls dies hilfreich ist, damit die Leute darauf verweisen können. Ich würde nicht unbedingt vorschlagen, dieses Image direkt zu verwenden, aber Sie können es gerne aus dem Dockerfile/install-Skript kopieren. MIT-lizenziert.


Schauen Sie sich shenv an:https://github.com/shenv/shenv. Genau wie rbenv, pyenv, goenv und andere, aber für Shells können Sie damit verschiedene Versionen von Bash installieren (zsh, fish, yash usw.).

(Haftungsausschluss:Ich bin derjenige, der pyenv in shenv geforkt hat!)


Linux
  1. Wie debuggt man ein Bash-Skript?

  2. Ist es möglich, ältere Versionen von Bash zu emulieren?

  3. Wie werden Parameter eingestellt, wenn Bash-Skript an Bash übergeben wird?

  4. Wie überprüfe ich, ob Bash Farben drucken kann?

  5. So testen Sie ein PHP-Skript

So führen Sie ein Bash-Skript aus {7 Methoden}

So überprüfen Sie, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist

So schreiben Sie ein Bash-Skript mit Beispielen

So verwenden Sie Bash-Dateitestoperatoren in Linux

So führen Sie ein Bash-Skript aus

Wie kann ich in einem Bash-Skript einen Hostnamen in eine IP-Adresse auflösen?