由於別名不是繼承的,是否有其他方法可以在 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
}

相關內容