Da Aliase nicht vererbt werden, gibt es eine Alternative zum Exportieren der ausführbaren Datei im PATH?

Da Aliase nicht vererbt werden, gibt es eine Alternative zum Exportieren der ausführbaren Datei im PATH?

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
}

verwandte Informationen