是否可以在OSX Yosemite中將bash實際更新到版本4.0?
echo $ BASH_VERSION3.2.57(1)-release
此文章和此線程指的是同一問題,但它們與舊的shell並排安裝了一個新的shell。有沒有辦法直接更新舊的bash shell?
是否可以在OSX Yosemite中將bash實際更新到版本4.0?
echo $ BASH_VERSION3.2.57(1)-release
此文章和此線程指的是同一問題,但它們與舊的shell並排安裝了一個新的shell。有沒有辦法直接更新舊的bash shell?
是否可以在OSX Yosemite中將bash實際更新到版本4.0?是的。
通過在終端中運行此命令來下載/安裝homebrew http://brew.sh/。
ruby -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
退出並重新打開您的終端。然後鍵入
brew install bash
通過終端gui更改默認shell,並使用新bash的文字路徑(編輯:我還沒有找到可以使用的CLI方式)
是否可以將bash實際更新為 Apple在OSX Yosemite中提供了bash 版本?
編輯:否。不是操作者問的那樣。例如,通過替換自身來升級當前安裝。在其他答案中指出,由於許可問題,Apple尚未更新bash。但是,對於大多數解釋器而言,下載bash的更新且單獨的版本並將其用作您的默認Shell是一種規範的解決方案。以python為例。您沒有將2.7升級到3.5,而是下載了單獨的版本並更改了默認值。
正如@William在回答中所說,由於GPL限制,Apple不提供bash 4。您可以安裝bash 4+,也可以通過執行以下操作將其設置為默認外殼程序(包括Terminal和 iTerm2)。
首先安裝較新版本的bash。有多種方式可以做到這一點,我更喜歡Homebrew。
brew install bash
安裝bash。 Bash 4現在在您的PATH上可用(假設Homebrew bin在您的路徑上)。但是,它是not,但仍是您的默認外殼程序。您可以通過運行哪個bash
來找到它的位置。就我而言,它位於 / usr / local / bin / bash
。
由於它在您的PATH上,因此您可以僅使用 bash
啟動Bash 4會話,也可以通過使用 Shebang在腳本中使用它。
例如,這將使用特定的bash實例。
#!/ usr / local / bin / bash
...您的腳本...
這將使用PATH上的第一個bash。
#!/ usr / bin / env bash
...您的腳本...
您還可以使用@ user136952的答案中所述的步驟,在Terminal / iTerm2中為特定配置文件設置bash路徑。
如上所述,安裝Bash 4之後仍然不是默認的Shell。要將bash設置為默認值,您需要再執行兩個步驟。
首先,將Bash 4路徑添加到您的 / etc / shells
文件中,以便它是允許的登錄shell。如 / etc / shells中所述,此文件包含有效登錄Shell的列表。添加新的bash路徑後,我的 / etc / shells
如下所示:
#chpass(1)可接受的shell列表。
#Ftpd不允許用戶連接未使用的用戶
#這些外殼之一。
/ bin / bash
/ bin / csh
/ bin / ksh
/ bin / sh
/ bin / tcsh
/ bin / zsh
/ usr / local / bin / bash
接下來,我們使用chsh使其成為您的默認外殼。因此,該用戶的任何會話都將使用該shell。您可以在在Mac OS X Terminal中更改外殼程序中了解有關此內容的更多信息,但是實際命令非常簡單。
chsh -s / usr / local / bin / bash
現在,新的bash是我們的默認登錄外殼。如果打開Terminal或iTerm2並運行 bash --version
,則應該看到新版本。請注意“許可證GPLv3 +”,這就是Apple不將其與macOS捆綁在一起的原因。
$ bash --version
GNU bash版本4.4.12(1)-發行版(x86_64-apple-darwin16.6.0)
版權所有(C)2016 Free Software Foundation,Inc.
許可證GPLv3 +:GNU GPL版本3或更高版本<http://gnu.org/licenses/gpl.html>
Apple不會更新Bash,因為最新版本已獲得GPLv3的許可,Apple無法使用。他們已經更新了大多數其他外殼。例如ZSH大多是最新的。
參考文獻:
經過一些研究,這似乎是主要問題:
當人們分發包含GPLv3下的軟件的用戶產品時, 6要求他們為您提供修改該軟件所需的信息。用戶產品是許可證中專門定義的術語;用戶產品的示例包括便攜式音樂播放器,數字錄像機和家庭安全系統。公開,這顯然對蘋果來說是個問題。
您可以安裝沒有自製軟件的其他Bash版本
並按照此處的步驟操作: https://gist.github.com/samnang/1759336
下載並安裝所需的bash版本 將X.X(在bash-X.X中)替換為所需的版本,例如4.4
curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz tar xzf bash-X.X.tar.gz 光盤bash-X.X ./configure --prefix = / usr / local && make && sudo make install
將新外殼添加到合法外殼列表中
sudo bash -c“ echo / usr / local / bin / bash >> / private / etc / shells”
更改用戶的外殼程序
chsh -s / usr / local / bin / bash
檢查Bash 4和/ usr / local / bin / bash ...
echo $ BASH && echo $ BASH_VERSION
如果希望bash命令使用別名,則可能要添加別名。 放入您的〜/ .bash_profile
alias bash =“ / usr / local / bin / bash”
2019年:就像這篇 post
一樣簡單 $ brew install bash
$ sudo bash -c'echo / usr / local / bin / bash >> / etc / shells'
$ chsh -s / usr / local / bin / bash
然後選擇一個新的終端,盡情享受吧!
(通過chsh或GUI)對shell進行更新的並行安裝將因腳本而失敗。腳本通常使用 env bash
,它會還原為OS X bash版本。因此,您想要的不是bash的完整更新,而是並行安裝,它總是返回bash的較新版本(即,即使 env
是調用)。
所以,要解決這個問題:
1)如其他評論者所述,通過Homebrew安裝bash
2)將登錄Shell設置為此新版本(通過其他人發布的GUI或chsh命令)
3)在$ PATH變量的 / bin
之前設置 / usr / local / bin
(或新bash版本的路徑)。您的〜/ .bash_profile
: export PATH = / usr / local / bin:$ PATH