별칭은 상속되지 않으므로 PATH에서 실행 파일을 내보내는 다른 방법이 있습니까?

별칭은 상속되지 않으므로 PATH에서 실행 파일을 내보내는 다른 방법이 있습니까?

Mac에서 bash 버전 간 전환을 위한 시스템을 설정하려고 합니다. 나는 이것을 작동하고 있습니다 :

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

별칭을 사용해 보았지만 상속되지 않습니다. 제 질문은 - 필요한 bash 실행 파일을 앞에 놓기 위해 PATH를 변경하는 다른 방법이 있습니까? 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
}

관련 정보