Unix Bash 放出第 5 個主要版本,這個版本主要修復了Bash 4.4 中幾個明顯的錯誤,同時也加入了一些新功能。Bash 是一個完整的POSIX 規范項目,除了有交互式命令列編輯功能,還在基架構上支援工作控制,並提供類似csh的功能等。
Bash 5.0 主要解決 Bash 4.4的錯誤,改變對nameref解析的方法,和一系列以模糊測試發現的潛在查出范圍的錯誤。另外,Bash 5.0 在不執行字符拆解以符合Posix標準解釋的情況下,在不同的上下文中,$@和$*的擴充也有許多改變,而且還解決不少極端案例以增加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。
更新截圖:
來源:cnBeta