我正在尝试设置一个系统来在 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 上并不容易。
这种技术的另一个缺点是必须使用 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
}