Bash

在您的系統上檢測到過時版本的 bash!更新 sdkman 時

  • June 6, 2020

我正在嘗試更新我的 macOS 中的軟體sdman但我收到 bash outadted 版本錯誤。

rajkumar.natarajan$ sdk update   
   An outdated version of bash was detected on your system!
   We recommend upgrading to bash 4.x, you have:

   3.2.57(1)-release
   Need to use brute force to replace candidates...

但是 bash 版本已經是最新的了。

rajkumar.natarajan$ which bash 
/usr/local/bin/bash   
rajkumar.natarajan$ bash --version   
GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin16.7.0)
Copyright (C) 2019 Free Software Foundation, Inc.   
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.   
There is NO WARRANTY, to the extent permitted by law.

sdman正在查看/bin/bash哪個是 3.2.57 版本,因為 macos 不能附帶比它更新的任何東西。

Apple 在其作業系統中包含如此舊版本的 Bash 的原因與許可有關。從 4.0 版(3.2 的後續版本)開始,Bash 使用 GNU 通用公共許可證 v3 (GPLv3),Apple 不(想要)支持。你可以在這里和這裡找到一些關於這個的討論。GNU Bash 3.2 版是 GPLv2 的最後一個版本,Apple 接受了它,因此它堅持使用它。

來源

您已經安裝了現代版本的 bash,但還沒有替換/bin/bash它。我真的不建議這樣做,因為它可能會破壞一些遺留腳本/程序(不太可能但可能)。

我的建議是忽略該警告。這是警告您,因為 bash v3.2 通常會受到shellshock漏洞的影響,但 Apple 已在其 Bash v3.2 版本中修補了此漏洞。

如果您無法忽略該警告並且真的想冒險更新您的/bin/bash我會將其移動到備份位置並將您的新 bash 符號連結到它。

sudo mv /bin/bash /bin/bash.bak
sudo ln -s /usr/local/bin/bash /bin/bash

但為了做到這一點,您需要繞過 SIP

要啟用或禁用系統完整性保護,您必須引導至恢復作業系統並從終端執行 csrutil(1) 命令。

  • 通過重新啟動電腦並在啟動時按住 Command 和 R 鍵來引導到 Recovery OS。
  • 從實用程序菜單啟動終端。
  • 輸入以下命令:

$ csrutil disable

  • 在電腦上啟用或禁用系統完整性保護後,需要重新啟動。

引用自:https://unix.stackexchange.com/questions/550075