Я пытаюсь настроить систему для переключения между версиями 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
}