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
}