OSXでbashをバージョン4.0に更新


81

OSX Yosemiteでbashをバージョン4.0に実際に更新することは可能ですか?

echo $BASH_VERSION
3.2.57(1)-release

この記事とこのスレッドは同じ質問を参照していますが、新しいシェルを古いシェルと並行してインストールします。古いbashシェルを直接更新する方法はありますか?


3
それをする必要はありません。実際、元のものを保持することは常に良い考えです。bashの2つ以上のバージョンを同時にインストールできます。デフォルトのいずれかを設定できます
-lupincho

基本的に、Appleのソフトウェアアップデートは、ShellshockのBASHへのアップデートで行ったように、システム上のBASHのバージョンを変更する責任があります。したがって、Appleがアップデートを提供しない限り、OS Xの一部としてインストールされたGNU BASHの最新バージョンに直接アップデートする方法はありません。間接的な方法は、何らかの方法で自分でダウンロードしてインストールすることです。それをデフォルトのシェルとして設定します。出荷されたバージョンを削除するか、Appleが更新したバージョンを削除するかは、ユーザー次第です。
user3439894

回答:


36

AppleはBashを更新しません。これは、最新バージョンがGPLv3の下でライセンスされており、Appleが使用できないためです。彼らは他のシェルのほとんどを更新しました。たとえば、ZSHはほとんどが最新です。

参照:

少し調べてみると、これが主要な問題のようです。

GPLv3に基づくソフトウェアを含むユーザー製品を配布する場合、セクション6では、そのソフトウェアを変更するために必要な情報を提供することを義務付けています。ユーザー製品は、ライセンスで特別に定義された用語です。ユーザー製品の例には、ポータブルミュージックプレーヤー、デジタルビデオレコーダー、ホームセキュリティシステムなどがあります。

これは、それ以外の場合はクローズドソースのソフトウェアであり、そのGPLの部分を一般の人が変更できるようにすることを要求します。これは明らかにAppleの問題です。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
bmike

5
この説明は意味がありません。GPL(v3またはそれ以外)バイナリを出荷しても、OSの残りの部分をリリースする必要があるという意味ではありません。OSの残りの部分はにリンクしていませんbash。「Tivoization」節はbash、例えばApple TVでは更新できないが、実際にはデスクトップMacでは更新できない理由を説明するかもしれません。さらに、「GPLで保護された部分」は、すでに一般の人々が変更可能にする必要があります。v3はそれを変更しません。GPL v3の特許条項は、AppleがGPL v3コードに触れることを思いとどまらせるのに十分と思います。
ジェームズドリン

なぜAppleにとってこれが問題になるのでしょうか?Bashは既にオープンソースです(1.14以上のすべてのバージョンはGNU @ ftp.gnu.org/gnu/bashから入手でき、macOSに含まれているバージョン(現在v3.2)はApple @ opensource.apple.com/source/bashから入手できます)、ただし、それは関係なく変更できます。

@ tjt263これは、Appleが使用しているバージョンであるGPLv3とGPLv2の違いについてであり、現在もライセンスされています。
ウィリアムTフログガード

3
右、Bash3.2はGPLv2の下でライセンスされています。Bash4.xはGPLv3の下でライセンスされています。だから何?あなたは言った:「最新バージョンはGPLv3の下でライセンスされているため、Appleは、バッシュは更新されませんAppleが使用することはできません。」なぜできないのですか?「これには、それ以外の場合はクローズドソースのソフトウェアが必要であり、そのGPL部分は一般変更可能にする必要があり、これは明らかにAppleにとって問題となるでしょう。」なぜそれが問題なのですか?彼らはすでにそうしています。すでに一般公開されています。すべてのソフトウェアがあります。特にそれがFOSSであり、彼らが自分のサイトのソースコードをそれを望む誰にでも与えているとき。

62

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のリテラルパスを使用して、ターミナルGUI経由でデフォルトのシェルを変更します(編集:動作するCLIの方法をまだ見つけていません)

ここに画像の説明を入力してください

OSX YosemiteでAppleが提供するbashバージョン4.0にbashを実際に更新することは可能ですか?

編集:いいえ。操作者が求めている方法ではありません。たとえば、現在のインストールをそれ自体を置き換える方法でアップグレードします。他の回答では、Appleがライセンスの問題のためにbashを更新していないことが指摘されています。ただし、ほとんどのインタープリターにとって、更新された別バージョンのbashをダウンロードし、それをデフォルトのシェルとして使用することが標準的なソリューションです。例としてpythonを取り上げます。2.7を3.5にアップグレードするのではなく、別のバージョンをダウンロードしてデフォルトを変更します。


12
次のコマンドを使用して、CLIでデフォルトを設定できますsudo chpass -s /usr/local/bin/bash。注:/usr/local/bin/毎回環境を変更せずにBrewがアップグレードを処理できるように、シンボリックリンクを指すのが最善です。
sansSpoon

3
アップル以外のシェルを使用するリスクは何ですか?
ビョークナンバーワンファン

5
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'その後chsh -s /usr/local/bin/bash、ターミナルのデフォルトのシェルを設定します
Abhijit Sarkar

51

@Williamが答えで言ったように、AppleはGPLの制限のためにbash 4を提供していません。ただし、bash 4+をインストールすることもできます。また、次の手順を実行して、デフォルトのシェル(TerminalおよびiTerm2を含む)にすることもできます。

Homebrew経由でBash 4をインストールする

最初に新しいバージョンのbashをインストールします。それにはさまざまな方法がありますが、私はHomebrewを好みます。

  • http://brew.shの説明に従ってHomebrewをインストールします。
  • を使用してbashをインストールしbrew install bashます。

Bash 4がPATHで使用できるようになりました(Homebrew binがパス上にあると仮定)。ただし、まだデフォルトのシェルではありません。を実行すると、その場所を見つけることができますwhich bash。私の場合、それは/usr/local/bin/bashです。

Bash 4の使用

PATH上にあるので、Bash 4セッションを開始するbashことができます。または、Shbangを使用してスクリプトで使用できます。

たとえば、これは特定のbashインスタンスを使用します。

#!/usr/local/bin/bash
...your script...

これは、PATHの最初のbashを使用します。

#!/usr/bin/env bash
...your script...

@ user136952の回答で説明されている手順を使用して、Terminal / iTerm2で特定のプロファイルのbashパスを設定することもできます。

Bash 4をデフォルトにする

上記のように、Bash 4をインストールした後もデフォルトのシェルではありません。bashをデフォルトにするには、さらに2つのステップを実行する必要があります。

まず、/etc/shellsファイルにBash 4パスを追加して、許可されたログインシェルになるようにします。/ etc / shellsで説明されているように、このファイルには有効なログインシェルのリストが含まれています。新しいbashパスを追加すると、/etc/shells次のようになります。

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash

次に、chshを使用してデフォルトのシェルにします。そのため、そのユーザーのセッションはすべてそのシェルを使用します。詳細については、Mac OS Xターミナルのシェルの変更を参照してください。実際のコマンドは非常に簡単です。

chsh -s /usr/local/bin/bash

これで、新しいbashがデフォルトのログインシェルになりました。ターミナルまたはiTerm2を開いて実行bash --versionすると、新しいバージョンが表示されます。「ライセンスGPLv3 +」に注意してください。これが、AppleがmacOSにバンドルしない理由です。

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-apple-darwin16.6.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

2
彼がリンクした記事/スレッドに基づいて、私は彼が本当に「デフォルトではない」ことを意味し、サイドバイサイドではないと言ったと思います。私の答えでは4がデフォルトなので、3は表示されなくなります。古いbashがまだディスクスペースを占有しているという事実は、私にとって大きな問題とは思えません。
スタッドギーク

1
私による+1。はい、OPはこれを望んでいませんが、質問はコミュニティに属しており、これが他の人を助けるなら素晴らしいです。OPが選択する答えとしてチェックを取得しないかもしれませんが、それは悪い答えにはなりません。
bmike

3
High Sierraではsudo chpass -s /usr/local/bin/bash、シェルをroot / sudo のみに変更します。通常のログイン用に変更するには、なしでコマンドを実行する必要がありますsudo。これはActive Directoryの問題かもしれません。よく分かりません。
ブラッドゾニエ18年

1
#!/usr/local/bin/bashシバンを使用する代わりに、使用方法#!/usr/bin/env bash説明)を調べてください。これにより、スクリプトを起動している環境が到達可能なbashのバージョン、つまり何which bashが返されても、スクリプトが実行されます。特定のパスを使用する、よりポータブルなソリューションです。他のユーザーがhomebrewを介してbashをインストールすることは期待できません。
イリヤモスク

1
@IllyaMoskvin、元々特定のパスを使用していました。明示的に使用する方法を示したかったからです。両方を持つように例を更新しました。
スタッドギーク

0

自作せずに別のバージョンのBashをインストールできます

  • GNU Bashに移動
  • 必要なバージョンをダウンロード(ここ
  • そして、こちらの手順に従ってください:https : //gist.github.com/samnang/1759336

    必要なbashバージョンをダウンロードしてインストールしてください

    curl -O http://ftp.gnu.org/gnu/bash/bash-X.X.tar.gz
    tar xzf bash-X.X.tar.gz
    cd 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"

-1

(chshまたはGUIを介した)シェルの更新を伴うサイドバイサイドインストールは、スクリプトに対して失敗します。スクリプトはenv bash、多くの場合、OS X bashバージョンに戻すを使用します。したがって、bashの完全な更新ではなく、常に新しいバージョンのbashが返される(つまり、env呼び出された場合でも)サイドバイサイドインストールが必要な場合があります。

したがって、これを処理するには:

1)他のコメンターが投稿したように、Homebrew経由でbashをインストールする

2)ログインシェルをこの新しいバージョンに設定します(他のユーザーが投稿したGUIまたはchshコマンドを使用)

3)$ PATH変数の/usr/local/bin前に(または新しいbashバージョンへのパスを)設定/binします~/.bash_profileexport PATH=/usr/local/bin:$PATH


これにより、bashバージョン3を必要とするスクリプト(つまり、Apple提供のスクリプト)が破損します。
サイドバイ

公正なポイント。しばらくこのように実行されており、問題はありません。Appleがスクリプトで完全なパスを提供しているのかもしれませんし、ひっかかっていないかもしれません。シェルからではなくAppleシステムレベルのスクリプトの場合、.bash_profileとにかく呼び出されることはないので、とにかくターミナルで直接実行するものにのみ影響を与えます。
-cwingrav

2
@Mark v≥4.xがv≤3.x用に記述されたスクリプトを壊すようなインスタンスは考えられません。あなたはできる?

-1

2019:この投稿のようにシンプル

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

その後、新しいターミナルをタブで移動してください。


1
説明なしで誰が私の答えを下票しましたか?
フェウダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.