Como os aliases não são herdados, existe alguma alternativa para exportar o executável no PATH?

Como os aliases não são herdados, existe alguma alternativa para exportar o executável no PATH?

Estou tentando configurar um sistema para alternar entre versões do bash em um Mac. Eu tenho isso que funciona:

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

Tentei usar aliases, mas eles não são herdados - minha pergunta é: existe uma alternativa para alterar o PATH para colocar o executável bash desejado na frente? Não funciona muito facilmente colocar um diretório inteiro no PATH se esse diretório tiver vários arquivos estranhos que eu não quero que o PATH veja.

A outra desvantagem dessa técnica é ter que usar uma função bash para alternar versões (a menos que alguém consiga pensar em uma maneira de usar um utilitário de linha de comando).

Eu tentei usar isso:

change_bash_version(){

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

  export -f bash;  # error here
}

mas o bash não gostou disso - dizer "bash" não é uma função

Responder1

Isso parece funcionar para mim com testes muito básicos:

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
}

informação relacionada