Поскольку псевдонимы не наследуются, есть ли альтернатива экспорту исполняемого файла в PATH?

Поскольку псевдонимы не наследуются, есть ли альтернатива экспорту исполняемого файла в PATH?

Я пытаюсь настроить систему для переключения между версиями bash на Mac. У меня есть это, которое работает:

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

Я пробовал использовать псевдонимы, но они не наследуются - мой вопрос - есть ли альтернатива изменению PATH, чтобы поместить нужный исполняемый файл bash впереди? Не очень-то просто поместить целый каталог в PATH, если в этом каталоге есть куча посторонних файлов, которые я не хочу, чтобы PATH видел.

Другим недостатком этого метода является необходимость использования функции bash для переключения версий (если только кто-то не придумает способ использовать утилиту командной строки).

Я попробовал использовать это:

change_bash_version(){

  bash(){
    $HOME/bash/versions/4.4.18/bash "$@"
  }

  export -f bash;  # error here
}

но bash это не понравилось - "bash" не является функцией

решение1

Кажется, это работает для меня при очень простом тестировании:

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
}

Связанный контент