shell script が動作しない原因を調査してみる修行

調査依頼。開発環境ではちゃんと動いていた shell script を実運用環境に持っていったら次のようなエラーが出て shell script が動かない、とのこと。

: bad interpreter: No such file or hogehoge.sh: /bin/sh

こういうとき考えうるもっとも可能性の高い原因は、改行コードでしょう。すなわち、シェルスクリプトの先頭が本来「#!/bin/sh[LF]」となっているはずが「#!/bin/sh[CR][LF]」となってしまっており、「/bin/sh[CR]」が見つからずにエラーになったのだろうと。
なぜ改行コードが変わったかは、先方のサーバにおくまでのどこかで改行コードの自動変換がはさまってしまったのだろう、ということで。FTP の text モード転送、メール添付したとき、CVS の checkout/export など、ファイルをテキストモードで「インテリジェントに」転送してくれる機能を使ったときに起こりがちです。今回は WinSCP の転送モードが automatic になっていたとのこと。