Ich versuche, ein System zum Wechseln zwischen Bash-Versionen auf einem Mac einzurichten. Ich habe Folgendes, das funktioniert:
change_bash_version(){
if test "$1" == "3"; then
export PATH="$HOME/bash/versions/3.2.57:${PATH}"
elif test "$1" == "4"; then
export PATH="$HOME/bash/versions/4.4.18:${PATH}"
else
export PATH="$HOME/bash/versions/5.0:${PATH}"
fi
}
export -f change_bash_version
Ich habe versucht, Aliase zu verwenden, aber sie werden nicht übernommen. Meine Frage lautet: Gibt es eine Alternative zum Ändern des Pfads, um die gewünschte ausführbare Bash-Datei an den Anfang zu setzen? Es funktioniert nicht sehr einfach, ein ganzes Verzeichnis auf den Pfad zu setzen, wenn dieses Verzeichnis eine Reihe irrelevanter Dateien enthält, die der Pfad nicht sehen soll.
Der andere Nachteil dieser Technik besteht darin, dass zum Wechseln der Versionen eine Bash-Funktion verwendet werden muss (es sei denn, jemandem fällt eine Möglichkeit zur Verwendung eines Befehlszeilenprogramms ein).
Ich habe versucht, dies zu verwenden:
change_bash_version(){
bash(){
$HOME/bash/versions/4.4.18/bash "$@"
}
export -f bash; # error here
}
aber bash mochte das nicht - "bash" zu sagen ist keine Funktion
Antwort1
Nach sehr einfachen Tests scheint dies für mich zu funktionieren:
change_bash_version(){
case $1 in
3) bash() { "$HOME/bash/versions/3.2.57/bash" "$@"; } ;;
4) bash() { "$HOME/bash/versions/4.4.18/bash" "$@"; } ;;
*) bash() { "$HOME/bash/versions/5.0/bash" "$@"; } ;;
esac
export -f bash
}