Mac の bash で連想配列を使おうと思い、declare したら -A オプションなんて知らないと言われる。
1 2 3 4 | $ sh hoge.sh hoge.sh: line 5: declare: -A: invalid option declare: usage: declare [-afFirtx] [-p] [name[=value] ...] |
あっ、まだ bash のバージョンが 4.0 未満なのかなっと思って確認したら、その通りでした・・・。
1 2 3 | $ sh --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19) |
今回は、Mac の bash の最新バージョンをインストールしていきます。
brew installでエラー
久しく使ってなかった brew。確かシェルに変わったんだよねって思い出しながら実行。
1 | $ brew install bash |
予期せぬエラーで躓きます・・・。
bash に限った話ではなく、どのパッケージをインストールしようとしても同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 | Error: The following directories are not writable by your user: /usr/local/bin /usr/local/share /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man8 You should change the ownership of these directories to your user. sudo chown -R $(whoami) /usr/local/bin /usr/local/share ... And make sure that your user has write permission. chmod u+w /usr/local/bin /usr/local/share ... |
どうやら、上記の 5 つのディレクトリの権限を調整しろとのこと。
/usr/local 配下ならいいだろっと思いながら chown しちゃいます。
1 | $ sudo chown -R $(whoami) /usr/local/bin /usr/local/share /usr/local/share/man /usr/local/share/man/man1 /usr/local/share/man/man8 |
以前からディレクトリ権限がおかしかったのか、brew 側の仕様変更なのかわかりませんが、ハードウェア的な問題で何度か PC を入れ替えているので、システム的におかしくなっちゃってる可能性が高いでしょうか。
brewの再実行
変更後、brew を再実行します。
1 | $ brew install bash |
bash が /usr/local/bin/bash にインストールされました。
バージョン 4 系かと思いきや、既に 5 系になっているようですね。
/usr/local/bin/bash が以下のパスを参照していました。
../Cellar/bash/5.0.18/bin/bash
bashのバージョン確認
念のためコマンドからもバージョン確認してみます。
1 2 3 | $ /usr/local/bin/bash --version GNU bash, バージョン 5.0.18(1)-release (x86_64-apple-darwin19.5.0) |
このまま一時的に使用してもいいのですが、どうせならデフォルトのシェルを変えてしまうのも悪くないですね。
以下のリストに /usr/local/bin/bash を追加しておきます。
このリストに定義されているシェルがシステムで利用可能になります。
1 2 3 | $ vi /etc/shells /usr/local/bin/bash |
次に、ログインシェルを切り替える chsh コマンドを実行しましょう。
先ほどインストールした bash のパスを指定します。
1 | $ chsh -s /usr/local/bin/bash |
ターミナルから新しくシェルを起動し確認してみましょう。
(タブ起動で問題ないです)
1 2 3 | $ bash --version GNU bash, バージョン 5.0.18(1)-release (x86_64-apple-darwin19.5.0) |