OSX Yosemiteでbashをバージョン4.0に実際に更新することは可能ですか?
echo $BASH_VERSION
3.2.57(1)-release
この記事とこのスレッドは同じ質問を参照していますが、新しいシェルを古いシェルと並行してインストールします。古いbashシェルを直接更新する方法はありますか?
OSX Yosemiteでbashをバージョン4.0に実際に更新することは可能ですか?
echo $BASH_VERSION
3.2.57(1)-release
この記事とこのスレッドは同じ質問を参照していますが、新しいシェルを古いシェルと並行してインストールします。古いbashシェルを直接更新する方法はありますか?
回答:
AppleはBashを更新しません。これは、最新バージョンがGPLv3の下でライセンスされており、Appleが使用できないためです。彼らは他のシェルのほとんどを更新しました。たとえば、ZSHはほとんどが最新です。
参照:
少し調べてみると、これが主要な問題のようです。
GPLv3に基づくソフトウェアを含むユーザー製品を配布する場合、セクション6では、そのソフトウェアを変更するために必要な情報を提供することを義務付けています。ユーザー製品は、ライセンスで特別に定義された用語です。ユーザー製品の例には、ポータブルミュージックプレーヤー、デジタルビデオレコーダー、ホームセキュリティシステムなどがあります。
これは、それ以外の場合はクローズドソースのソフトウェアであり、そのGPLの部分を一般の人が変更できるようにすることを要求します。これは明らかにAppleの問題です。
bash
。「Tivoization」節はbash
、例えばApple TVでは更新できないが、実際にはデスクトップMacでは更新できない理由を説明するかもしれません。さらに、「GPLで保護された部分」は、すでに一般の人々が変更可能にする必要があります。v3はそれを変更しません。GPL v3の特許条項は、AppleがGPL v3コードに触れることを思いとどまらせるのに十分だと思います。
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のリテラルパスを使用して、ターミナルGUI経由でデフォルトのシェルを変更します(編集:動作するCLIの方法をまだ見つけていません)
OSX YosemiteでAppleが提供するbashバージョン4.0にbashを実際に更新することは可能ですか?
編集:いいえ。操作者が求めている方法ではありません。たとえば、現在のインストールをそれ自体を置き換える方法でアップグレードします。他の回答では、Appleがライセンスの問題のためにbashを更新していないことが指摘されています。ただし、ほとんどのインタープリターにとって、更新された別バージョンのbashをダウンロードし、それをデフォルトのシェルとして使用することが標準的なソリューションです。例としてpythonを取り上げます。2.7を3.5にアップグレードするのではなく、別のバージョンをダウンロードしてデフォルトを変更します。
sudo chpass -s /usr/local/bin/bash
。注:/usr/local/bin/
毎回環境を変更せずにBrewがアップグレードを処理できるように、シンボリックリンクを指すのが最善です。
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
その後chsh -s /usr/local/bin/bash
、ターミナルのデフォルトのシェルを設定します
@Williamが答えで言ったように、AppleはGPLの制限のためにbash 4を提供していません。ただし、bash 4+をインストールすることもできます。また、次の手順を実行して、デフォルトのシェル(TerminalおよびiTerm2を含む)にすることもできます。
最初に新しいバージョンのbashをインストールします。それにはさまざまな方法がありますが、私はHomebrewを好みます。
brew install bash
ます。Bash 4がPATHで使用できるようになりました(Homebrew binがパス上にあると仮定)。ただし、まだデフォルトのシェルではありません。を実行すると、その場所を見つけることができますwhich bash
。私の場合、それは/usr/local/bin/bash
です。
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をデフォルトにするには、さらに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>
sudo chpass -s /usr/local/bin/bash
、シェルをroot / sudo のみに変更します。通常のログイン用に変更するには、なしでコマンドを実行する必要がありますsudo
。これはActive Directoryの問題かもしれません。よく分かりません。
自作せずに別のバージョンの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"
(chshまたはGUIを介した)シェルの更新を伴うサイドバイサイドインストールは、スクリプトに対して失敗します。スクリプトはenv bash
、多くの場合、OS X bashバージョンに戻すを使用します。したがって、bashの完全な更新ではなく、常に新しいバージョンのbashが返される(つまり、env
呼び出された場合でも)サイドバイサイドインストールが必要な場合があります。
したがって、これを処理するには:
1)他のコメンターが投稿したように、Homebrew経由でbashをインストールする
2)ログインシェルをこの新しいバージョンに設定します(他のユーザーが投稿したGUIまたはchshコマンドを使用)
3)$ PATH変数の/usr/local/bin
前に(または新しいbashバージョンへのパスを)設定/bin
します~/.bash_profile
。export PATH=/usr/local/bin:$PATH
.bash_profile
とにかく呼び出されることはないので、とにかくターミナルで直接実行するものにのみ影響を与えます。