Bash 5.0 釋出,部分功能與 4.4 不相容
Unix Bash 放出第 5 個主要版本這個版本主要修復了Bash 4.4 中幾個明顯的錯誤,同時也加入了一些新功能。Bash 是一個完整的POSIX 規範專案,除了有互動式命令列編輯功能,還在基架構上支援工作控制,並提供類似csh的功能等。
Bash 5.0 主要解決 Bash 4.4的錯誤,改變對nameref解析的方法,和一系列以模糊測試發現的潛在查出範圍的錯誤。另外,Bash 5.0 在不執行字元拆解以符合Posix標準解釋的情況下,在不同的上下文中,[email protected]和$*的擴充也有許多改變,而且還解決不少極端案例以增加Posix的一致性。
而本次最重要的功能更新,是增加了新的環境變數,BASH_ARGV0、EPOCHSECONDS和EPOCHREALTIME。而內建的 History 功能現在可以用來刪除歷史資料的範圍,並且將負的引數作為歷史列表末端的偏移量。Bash 5.0還增加了一個選項,允許區域變數整合前一個作用域中,具有相同名稱的變數名。
另外,還加入一個新的選項,啟用後將允許 shell 只嘗試 擴充套件開始下標(Subscripts)一次,但官方表示,這個功能在數學表示式中仍會出現使用問題。Bash 5.0現在會預設啟用globasciiranges 選項,使用者可以在配置階段將其設定為預設關閉。
官方提醒,Bash 4.4和Bash 5.0之間存在部分不相容的更新,像是 nameref 解析方法的更新,代表著使用 namerefs 會出現不同的行為,儘管官方提到他們已經儘可能減少這種相容性問題,但仍有部分無法避免。除此之外,現在在預設情況下,當啟用擴充模式的時候, shell 才會啟動配置BASH_ARGC和BASH_ARGV,官方表示,這是一個之前的設定定疏忽,在傳遞大量引數時,會造成效率低下的問題。
官方建議使用者可以將 Bash 連線到已安裝的 Readline 庫,而非使用 lib/readline 中的版本,因為只有 Readline 8.0 以及以上版本,才能提供所有Bash 5.0需要的字元,使用早前的 Readline 庫版本將無法正常執行。
升級至 Bash 5.0
檢查現有的 bash 版本
bash --version
。使用 brew 安裝 bash
brew install bash
。
由於 MacOS 禁止更改系統目錄許可權,並引入 sip 機制,所以需要先關閉sip,修改 bash 相關設定,再開啟 sip 。
重啟 MacOS ,開機時按住
Command+R
出現介面之後,選擇 Utilities menu 中 Terminal 。
在Terminal 中輸入
csrutil disable
關閉SIP。重啟 MacOS
加入軟連線
sudo mv /bin/bash /bin/bash.origin sudo ln -s /usr/local/bin/bash /bin/bash
重啟電腦,開機時按住
Command+R
。出現介面之後,選擇 Utilities menu 中 Terminal 。
在Terminal 中輸入
csrutil enable
開啟 SIP。
更新截圖: