27)bashとshebang
Macでシェルスクリプトの勉強を始めました。テキストは2017年に出版された、三宅英明『新しいシェルプログラミングの教科書』という新しいものを選びました。このテキストはbashというシェルの中で最も基本的なものにフォーカスを当てたものです。
というわけで勉強を始めましたが、「連想配列」でいきなり詰まってしまいました。連想配列はbashのバージョン4で新しく追加された機能です。僕のMacのbashのバージョンが3だったので、4にバージョンアップしましたが、どうも思った様に動いてくれません。その原因はMacの構造(?)にありました(違うかも)。
シェルスクリプトを記述する場合、一行目に「shebang(シバン)」と呼ばれるものを記述します。これは、起動したいインタプリタのパスを指定するもので、bashであれば、bashが格納されたパス(#!/bin/bash)を記述します。これが罠でした。
というのも、bash 4.xにバージョンアップしたbashは、既存のbash(/bin/bash)とは異なった、別のディレクトリ(/usr/local/bin/bash)に格納されていました。つまり、shebangも「#!/usr/local/bin/bash」と記述しなければbash 4.xにパスが通らず、その機能が使えなかったという訳です(小一時間分かりませんでした)。追記(2020-03-17):これは、macOSが標準でパッケージ管理ソフトを用意していないために起きたことだ。
シェルスクリプトの勉強はMacよりも、おとなしくLinuxでやった方が良さそうですね。追記(2020-03-17):これは完全に正しい。macOSをどれだけ触ろうが、LinuxどころかUnixの勉強にすらならない。macOSのカーネルはXNUという。これは、X is Not Unixの頭文字である。
2018-04-03