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
エイリアスを使用しようとしましたが、継承されません。質問ですが、PATH を変更して、必要な bash 実行ファイルを先頭に配置する代わりに何か方法がありますか? 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
}