どういう問題か?
私はMakefileを使って開発環境構築を自動化したりするのだが、その際にsourceコマンドを実行させるシェルスクリプトを書いた。 そして実行したところ以下のようなエラーが表示され、実行できなかった。
make source command not found
エラートレースを読めば一目瞭然なのだが、ローカルで実行しても問題なくコマンドのパスは通っているようで、ぱっとみ原因がわからなかったがすぐに以下の要因にいたった。
原因
Makeの処理ではシェルスクリプトが使われるが、それが/bin/sh
になってしまっていたことが問題だった。
解決法
/bin/bash
を使うようにMakeに教えて上げる。
具体的には以下をMakefile冒頭に記載することで解決する。
SHELL=/bin/bash ...//Makeの処理
最後に
Makeはこの他にも各行が異なるプロセスで処理されたり(環境変数が引き継げない)等のハマリポイントがあるので大変だが、気軽にかけて良いので重宝している。 どんな自動化ツールも最終的にはシェルスクリプトで各部分が多少は発生すると思っている。 色々なデプロイ自動化もそのコマンド自体は実行する必要があったり、どこからかcredentialを持ってきたりとこまかい手間が発生する。 Makeは最後のそういう細かい作業をラップするのに最適なツールだと思う。
参考

- 作者:Robert Mecklenburg
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/12/01
- メディア: 大型本