ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

macOSのBashを新しくする

この通り、macOSのBashはバージョン3.2.57です。

$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
Copyright (C) 2007 Free Software Foundation, Inc.

ここにアクセスすると、バージョン4や5がリリースされていることがわかります。

ftp.gnu.org

macOSのBashが古いままな背景

macOSのBashが更新されない理由は、Bashのv4以降、GPLv3ライセンスに切り替わったためです。macOSにGPLv3ライセンスのソフトウェアをバンドルするのを嫌って、一部のソフトウェアは廃止されたり置き換えられました。

macOSのシェルについてはデフォルト設定はZSHが使われるようになりました。私も普通に使っていたのですが、仕事ではLinux、クライアントとしてはmacOSを使う手前、シェルを共通化したいなという思いがあり組み込みのBashを使っていたのですが、いかんせん古い故にちょっとしたトラブルがちょこちょこ発生していました。

その中の一つがこれです。macOSのターミナルに文字列をコピペするとまれに「bracketed paste mode」が効いてしまって、余計な文字列が先頭と終わりについてしまうという問題です。

シェルをresetすれば回避できるのですが、Bashをバージョン4以降にすると問題が起きないという情報も見つけました。というわけで、私の中で新しいバージョンのBashへの移行欲が高まりました。

stackoverflow.com

macOSに新しいバージョンのBashを入れる方法

Homebrewで入れる方法、自分でビルドする方法がよく見つかります。 もう一つ見つかるのが、BashをHomebrewでインストールするのはおすすめしないという情報です。

ざっくりまとめると「新しいBashが公開されると新しいバージョンに置き換わるので、新しいBashを常用している場合に設定と存在するバイナリーのバージョン不整合が起こり、そのバージョンのBashはもうなくてシェルが開けない(=環境が壊れる)可能性があるのでおすすめしない」ということみたいです。

というわけで、次のような方法でビルドしてインストールしました。

  • まずは公式から最新のバージョンのBashを探します

https://ftp.gnu.org/gnu/bash/

  • 執筆日時点では5.2.15が最新でした。そのため次のようにインストールしました
wget https://ftp.gnu.org/gnu/bash/bash-5.2.15.tar.gz
tar xf bash-5.2.15.tar.gz
cd bash-5.2.15

./configure --prefix=/opt/bash-5.2
make
sudo make install
  • ユーザーのデフォルトのシェルは次のように設定しました
sudo sh -c "echo '/opt/bash-5.2/bin/bash' >> /etc/shells"
chsh -s /opt/bash-5.2/bin/bash
  • さらに.bash_profileに書いてパスを通しました
vi ~/.bash_profile 

#shell
export PATH="/opt/bash-5.2/bin:$PATH"

source ~/.bash_profile

以上です。これでBashを置き換えることに成功しました。 元のBashはmacOSからBashが廃止されない限りは/binに残り続けます。

$ bash --version
GNU bash, バージョン 5.2.15(1)-release (aarch64-apple-darwin23.0.0)
Copyright (C) 2022 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (arm64-apple-darwin23)
Copyright (C) 2007 Free Software Foundation, Inc.

...時が15年進みました。

bash completionをインストールする

bashの入力補完機能を有効にするためにbash completionもインストールしておきたいと思います。

これは別に置き換わっても困ることはほぼないと思いますので、Homebrewからインストールします。 bash-completionがBash 3.2向けで、bash-completion@2がBash 4.1+向けです。つまり、次のようにインストールして終わりです。

brew install bash-completion@2

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。