作曲・指導・C言語・Linux

金沢音楽制作

金沢音楽制作では、楽曲・楽譜の制作と、作曲や写譜などレッスンを行っています。


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