【Mac】最新のbash5.0(+パッチ)をインストール

コンピュータ関連
スポンサーリンク

さて、つい先日知ってからちょっと気になっていたこと。

macOS Catalina(10.15)からデフォルトシェルが zsh に変更されているという話。

その辺りについては詳しく知らないものの、
既に変更されたのなら今後はzshを使った方が良いのではないか、
どうせならzshに慣れ親しんでいった方が良いのではないか・・・
と、思って色々調べてみた。

そしたらなんとHigh Sierraにもzshが入っているらしい。(バージョン古いけど)
というか幾つもインストールされているのね。

それどころか「zshからfishに乗り換えました!」的な記事が散見されることに気が付いた。(意味深)

ん〜・・・そうなのか。

bashを使い続けることもまぁできるみたいだし、
そのあたりを鑑みて必ずしもzshでなくても良いのではないかと思い始めた。

で、ひとまずbashを最新のものにしてみようかと。

スポンサーリンク

bashを最新のバージョンにアップデート

そもそも今使っているbashのバージョンは何なのかと調べてみたら

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

version 3.2.57(1)-releaseと表示された。

最新のものは2019年1月にリリースされたbash5.0、随分と古いものを使っていたことがわかる。
(ちなみにMojave(10.14)でも入っているのは同じバージョンらしい)

そこで今回は最新のbash5.0をHigh Sierraにインストールしてみたいと思います。

Homebrewを使ってインストールしてはいけない?

調べていくうちに気になる記事を見つけました。

Homebrewを使って簡単にインストールできることを紹介しているサイトがある中、
それはお勧めできない」という記事をいくつか発見。

どうやらHomebrewを使ってインストールした場合、
何らかの事情でその辺りの調子が悪くなることで、bashの環境をも崩してしまうことが心配としてあるらしい。

また、Homebrewは管理者権限を持つシングルユーザーのインストール用に設計されているため、
そのワークフローは管理システムで管理された大規模なデプロイメントには対応していないとの事。

まぁ実際は大規模な開発をするわけではない個人ユースの(というか個人的な趣味程度の)話なのでHomebrewでインストールしても全く問題ないとは思う

ただ今回は物は試しでbrewを使わずにインストールしてみようとかと。

(参考サイト:「Install Bash 5 on macOS」「MacOSでbashを最新版にする【重要】」)

スポンサーリンク

bash5.0のインストール手順

作業環境:macOS High Sirra(10.13.6)

イメージとしては既存のbash3.2を残しつつ、bash5.0を新たにインストールし使用できるようにする。

ファイル(bash-5.0.tar.gz)のダウンロード

まずはbash5.0のダウンロードから。

gnu/bash/bash-5.0.tar.gz

ダウンロードしたものを展開すると「bash-5.0」というフォルダが作成される。

パッチもダウンロードして当てておく

今日確認した時点(2020/5/24)で bash50-001 から bash50-017 まである。

これらを
gnu/bash/bash-5.0-patches/

から一つ一つダウンロードしてもいいのだが、大変なのでターミナルから一気に行う。

先ほど出来た「bash-5.0」フォルダを右クリック、「フォルダに新規ターミナル」でターミナルを開き、

$ curl 'https://ftp.gnu.org/gnu/bash/bash-5.0-patches/bash50-[001-017]' | patch -p0

と入力すると、ずらずら〜っとダウンロードしたのちに自動でパッチを当ててくれる。

※bash50-[001-017]の部分はインストールを試みる時点で存在するパッチの数に変更
スポンサーリンク

configure script

パッチが当てられたら次に

$ ./configure

と入力。

ずらずら〜っとログが表示されたのち、処理が終わったら

$ make

これまた処理が終わったら

$ sudo make install

これでインストールは完了。

/usr/local/bin

の中にbash5.0がインストールされました。

もともと入っている bash(3.2) は

/bin/bash

に入っている。

ログインシェルの変更

さて、bash5.0のインストールは完了した。
が、現在は二つのバージョンが入っている状態にある。

スポンサーリンク

試しにバージョンを表示させてみると

$ bash --version
GNU bash, バージョン 5.0.17(2)-release (x86_64-apple-darwin17.7.0)
Copyright (C) 2019 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.

と表示され、
おまけにも一つ

$ echo $BASH_VERSION
3.2.57(1)-release

それぞれ違う結果が返ってきた。

これはデフォルトで設定されているパスの順番で
/usr/local/bin(ver5.0のbashがある場所)が /bin(ver3.2のbashがある場所)より前にある為で、
「bash」と入力された際、ver5.0の方が先に見つかるため「5.0.17(2)-release」と返される。

ただデフォルトシェルの変更をまだ行っていないので、
組み込みシェル変数の「BASH_VERSION」は「3.2.57(1)-release」が表示されるということらしい。

$ set
...
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_REMATCH=([0]="0")
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="57" [3]="1" [4]="release" [5]="x86_64-apple-darwin17")
BASH_VERSION='3.2.57(1)-release'
....

とりあえず先に

/etc/shells

に今回インストールしたbash(5.0)へのパスを追記。

$ sudo bash -c 'echo /usr/local/bin/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 -s /usr/local/bin/bash

これで変更完了。

ターミナルを一度閉じて(ログアウト)開き直したのち、
再度確認してみると

$ echo $BASH_VERSION
5.0.17(2)-release
$ set
...
BASH=/usr/local/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_REMATCH=([0]="c")
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="0" [2]="17" [3]="2" [4]="release" [5]="x86_64-apple-darwin17.7.0")
BASH_VERSION='5.0.17(2)-release'
...

無事変更されました。

スポンサーリンク

まとめ

これでデフォルトのログインシェルを bash5.0 へ変更出来たわけですが、
ぶっちゃけ変更点など細かいことはよくわかっていません。(笑

そこまで使いこなしているわけではないので。

とりあえず前のが古すぎる感じがしたのと、
新しいんだから便利になっているに違いない!という漠然とした思いからです。

まぁなんかあっても元に戻せばいいしね。
色々勉強になった。

ということで今回は以上!

コメント

タイトルとURLをコピーしました