経緯
シェルワンライナー本*1に取り組むにあたり、推奨環境のUbuntuを用意できず、MacOSで行なっていたのだが、MacOSであるが故に本通りの結果を得られないことが何度かあった。
そこへカツニャリさん (id:papiro)に本ブログのコメント欄で以下の通りご教示いただいた。
本の問題はUbuntu環境を前提にしているので、GNU関連のコマンドを使っています。出来ればUbuntuが良いですが、macOSの場合はHomebrewで下記のパッケージを入れておくと良いです。
bash、coreutils、findutils、gawk、gnu-sed、grep
bashはmacOS標準付属のものがバージョンが古いためです。インストール後terminalで/usr/local/bin/bash を起動してください。
coreutilsはGNU版のlsやdateコマンドなどが使えます。コマンド名の頭に'g'が付きます。例えばglsやgdateなど。
findutils以下も同様にGNU版のコマンドで、頭に'g'が付きます。
教えていただいた通り、各パッケージを導入していったので、ものすごく簡単ではあるが一応メモを残しておきたい。
インストール
grep
問題7を解いた際にすでにインストールしていた。
シェル・ワンライナー160本ノック 問題7 - しぐまろぐ
bash
まずバージョン確認。
$ bash --version GNU bash, version 3.2.57(1)-release (arm64-apple-darwin22) Copyright (C) 2007 Free Software Foundation, Inc.
インストール。
$ brew install bash
インストールしただけではバージョンは変わらない。
$ which -a bash
/opt/homebrew/bin/bash
/bin/bash
/opt/homebrew/bin/bashがさっきインストールした新しい方。これを実行する。
$ /opt/homebrew/bin/bash
最新の方が適用された。
$ bash --version GNU bash, バージョン 5.2.15(1)-release (aarch64-apple-darwin22.1.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.
参考サイト
エイリアス設定
また、各コマンドは頭にgをつけて実行する必要があるため、頻繁に使うものについては、~/.bashrcにaliasを設定しておき、gがなくても実行できるようにした。