題:
在OSX上將bash更新到版本4.0
sluijs
2015-06-28 14:50:45 UTC
view on stackexchange narkive permalink

是否可以在OSX Yosemite中將bash實際更新到版本4.0?

  echo $ BASH_VERSION3.2.57(1)-release  

文章和此線程指的是同一問題,但它們與舊的shell並排安裝了一個新的shell。有沒有辦法直接更新舊的bash shell?

不需要這樣做。實際上,保留原始名稱總是一個好主意。可以同時安裝兩個或多個bash版本,您可以將任意一個設置為默認值
從本質上講,Apple的軟件更新將負責更改系統上BASH的版本,就像對Shellshock的BASH進行更新一樣。因此,除非Apple提供更新,否則沒有直接的方法來更新到OS X的一部分中安裝的最新版本的GNU BASH。間接的方法是自己通過一種或多種方式下載並安裝並然後將其設置為默認外殼。是否選擇刪除出廠版本或Apple更新版本,由您決定。
六 答案:
pemby
2015-06-28 15:01:47 UTC
view on stackexchange narkive permalink

是否可以在OSX Yosemite中將bash實際更新到版本4.0?是的。

  1. 通過在終端中運行此命令來下載/安裝homebrew http://brew.sh/

      ruby​​ -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”  
  2. 退出並重新打開您的終端。然後鍵入

      brew install bash  
  3. 通過終端gui更改默認shell,並使用新bash的文字路徑(編輯:我還沒有找到可以使用的CLI方式)

  4. ol>

    enter image description here

    是否可以將bash實際更新為 Apple在OSX Yosemite中提供了bash 版本?

    編輯:否。不是操作者問的那樣。例如,通過替換自身來升級當前安裝。在其他答案中指出,由於許可問題,Apple尚未更新bash。但是,對於大多數解釋器而言,下載bash的更新且單獨的版本並將其用作您的默認Shell是一種規範的解決方案。以python為例。您沒有將2.7升級到3.5,而是下載了單獨的版本並更改了默認值。

您可以使用以下命令通過CLI設置默認值:sudo chpass -s / usr / local / bin / bash。注意:最好指向`/ usr / local / bin /`中的符號鏈接,這樣Brew可以處理升級而不必每次都更改環境。
使用非Apple外殼會有什麼風險?
`sudo bash -c'echo / usr / local / bin / bash >> / etc / shells'`然後`chsh -s / usr / local / bin / bash`將設置終端的默認shell
studgeek
2017-07-23 22:07:52 UTC
view on stackexchange narkive permalink

正如@William在回答中所說,由於GPL限制,Apple不提供bash 4。您可以安裝bash 4+,也可以通過執行以下操作將其設置為默認外殼程序(包括Terminal和 iTerm2)。

通過Homebrew安裝Bash 4

首先安裝較新版本的bash。有多種方式可以做到這一點,我更喜歡Homebrew。

  • 按照 http://brew.sh中的說明安裝Homebrew。
  • 使用 brew install bash 安裝bash。

Bash 4現在在您的PATH上可用(假設Homebrew bin在您的路徑上)。但是,它是not,但仍是您的默認外殼程序。您可以通過運行哪個bash 來找到它的位置。就我而言,它位於 / usr / local / bin / bash

使用Bash 4

由於它在您的PATH上,因此您可以僅使用 bash 啟動Bash 4會話,也可以通過使用 Shebang在腳本中使用它。

例如,這將使用特定的bash實例。

 #!/ usr / local / bin / bash
...您的腳本...
 

這將使用PATH上的第一個bash。

 #!/ usr / bin / env bash
...您的腳本...
 

您還可以使用@ user136952的答案中所述的步驟,在Terminal / iTerm2中為特定配置文件設置bash路徑。

將Bash 4設為默認值

如上所述,安裝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>
 
他提到自己明確不希望安裝並排選項。
根據他與文章/主題的聯繫,我認為他的意思是“並沒有說”“不違約”。我的答案將默認值設為4,因此不再顯示3。在我看來,舊的bash恰好仍在佔用一些磁盤空間這一事實似乎並不重要。
由我+1。是的,OP並不想這樣做,但是問題屬於社區,如果這對其他人有幫助,那就太好了。它可能不會像OP選擇的答案那樣得到檢查,但這並不會是一個錯誤的答案。
@studgeek,是否有使bash4成為Mac OS X上根用戶的默認外殼的長期副作用?我運行了chsh命令,但要嘗試記住,如果事情一團糟,我需要將其改回來。但是,這將使我輕鬆知道此問題的答案。謝謝!
在High Sierra上,sudo chpass -s / usr / local / bin / bash將我的shell更改為root / sudo_only。_要更改我的常規登錄名,我必須運行不帶sudo的命令。這可能是Active Directory的事情;我不確定。
不要使用`#!/ usr / local / bin / bash` shebang,而是考慮使用`#!/ usr / bin / env bash`([說明](https://stackoverflow.com/questions/16365130/what-usr-bin-env-bash和usr-bin-bash之間的差異))。這將以啟動腳本的環境可以訪問的任何版本的bash來運行腳本,即返回哪個“ bash”。這是使用特定路徑的更可移植的解決方案。我們不能期望其他用戶通過自製軟件安裝bash。
@BraddSzonye是的,不錯。我不應該把sudo卡在裡面。我已經更新了。
@IllyaMoskvin,我最初使用的是特定路徑,因為我想展示如何顯式使用它。我已經更新了兩個示例。
@harperville我不應該在chsh之前使用sudo。使用chsh運行它只會為當前用戶更改它(按照您的建議,這似乎更安全)。
@studgeek抱歉,我的評論針對其他通過的讀者,但感謝您更新答案!我喜歡`env`方法,因為它使在macOS和Linux之間重用腳本變得更加容易,例如在主機和VM之間。
對我來說,`chsh`是關鍵的丟失步驟。謝謝。
William T Froggard
2015-07-23 23:30:17 UTC
view on stackexchange narkive permalink

Apple不會更新Bash,因為最新版本已獲得GPLv3的許可,Apple無法使用。他們已經更新了大多數其他外殼。例如ZSH大多是最新的。

參考文獻:

經過一些研究,這似乎是主要問題:

當人們分發包含GPLv3下的軟件的用戶產品時, 6要求他們為您提供修改該軟件所需的信息。用戶產品是許可證中專門定義的術語;用戶產品的示例包括便攜式音樂播放器,數字錄像機和家庭安全系統。公開,這顯然對蘋果來說是個問題。

評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/68950/discussion-on-answer-by-william-t-froggard-update-bash-to-version-4-0-在OSX上)。
這種解釋是沒有道理的。交付GPL(v3或其他版本)二進製文件並不意味著將需要釋放其餘的OS。其餘的操作系統沒有“鏈接”到“ bash”。“ Tivoization”子句可能解釋了為什麼無法在Apple TV上更新bash,而在台式Mac上卻無法更新bash。此外,“ GPL的部分”已經需要由公眾修改;v3不會改變這一點。我*相信* GPL v3的* patents *子句足以阻止Apple接觸GPL v3代碼。
為什麼這對Apple來說是個問題?Bash已經開放源代碼(所有≥1.14的版本都可以通過GNU @ http://ftp.gnu.org/gnu/bash/獲得; macOS隨附的版本(當前為v3.2)可以通過Apple @ https://獲得)。opensource.apple.com/source/bash/),但無論如何都可以對其進行修改。
-1
正確,Bash3.2是根據GPLv2許可的。Bash4.x是根據GPLv3許可的。所以呢?您說:*“ Apple不會更新Bash,因為最新版本已獲得GPLv3的許可,而** Apple無法使用**。” *他們為什麼不能?*“這將要求封閉源代碼的軟件的GPL部分必須由公眾**修改”,這顯然對Apple來說是個問題**。” *為什麼這是個問題?他們已經做到了。它已經可以被公眾修改。所有軟件都是。特別是當它是FOSS時,他們會將自己網站上的源代碼分發給任何需要它的人。
@jamesdlin究竟有什麼專利條款使Apple遠離Bash 4?
@FranklinYu先生,我不記得我在想什麼,但也許“您可能未提起訴訟(包括訴訟中的交叉索賠或反索賠),指稱任何專利權都通過製造,使用,出售,提供或提供而受到侵犯。出售或導入程序或其任何部分”
Raposo
2018-10-16 17:48:12 UTC
view on stackexchange narkive permalink

您可以安裝沒有自製軟件的其他Bash版本

  • 轉到 GNU 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”
     
這讓我感到很滿意,但是我對此感到奇怪:為什麼不簡單地*替換*古董`/ bin / bash`?是因為需要與Apple在MacOS中發行的其他“古董”軟件兼容嗎?
Feuda
2019-10-17 13:34:30 UTC
view on stackexchange narkive permalink

2019年:就像這篇 post

一樣簡單
  $ brew install bash
$ sudo bash -c'echo / usr / local / bin / bash >> / etc / shells'
$ chsh -s / usr / local / bin / bash
 

然後選擇一個新的終端,盡情享受吧!

誰在沒有解釋的情況下否決了我的答案?
它可能被否決了,因為它是這個https://apple.stackexchange.com/a/193413/333802的副本以及註釋
cwingrav
2018-05-12 01:20:59 UTC
view on stackexchange narkive permalink

(通過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

這將破壞期望使用bash版本3的腳本-即Apple提供的腳本-您需要並排使用sde
一個公平的觀點。像這樣運行了一段時間,沒有問題。也許Apple在其腳本中提供了完整的路徑,或者只是沒有遇到障礙。對於蘋果系統級腳本,即不是從外殼程序,它無論如何都不會調用`.bash_profile`,因此它只會影響您直接在終端中運行的內容。
@Mark我想不出一個實例,其中v≥4.x會破壞為v≤3.x編寫的腳本。你能?


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...