エイリアスは継承されないので、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に保存するのは簡単ではありません。

この手法のもう1つの欠点は、バージョンを切り替えるには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
}

おすすめ記事