별칭은 상속되지 않으므로 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
}

관련 정보