由于别名不被继承,是否有其他方法可以在 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

我尝试使用别名,但它们不会被继承 - 我的问题是 - 有没有其他方法可以更改 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
}

相关内容