改行コードを変更する(dos2unix編)
※実経験の記憶を頼りに自宅の PC 環境(VMWareなど)で再現している内容もあるのでご注意下さい
2008-12-08
sitemap.xml を作成するための Perl スクリプトを作成してみましたが、久しぶりに改行コードをミスったので備忘録。Windows 上で作成したファイルは、通常は改行コードを CRLF で扱いますが、Linux 上では LF で改行コードを判断します。よって、Linux 上で改行コードが CRLF のスクリプトを実行すると、下記のようなエラーが出力されます。
$ ./sitemap.pl -bash: ./sitemap.pl: /usr/bin/perl^M: bad interpreter: No such file or directory
この改行コード問題については、開発ルールなどであらかじめ決めてくと安全ですが、Subversion や CVS などのソースリポジトリにコミットする際にも意識するようにしています。また、サーバへのデプロイ時に意図的に変換(ant やシェル内で変換)をかけるくらい厳密に注意する時もあります。Eclipse を使っていた頃は、Eclipse 上で改行コードを変換できる機能が用意されていたので、ソースをコミットする前に注意していました。
Linux 上では、vi などで改行コードを確認できないですが(設定によってはできるかも)、emacs や下記のように cat の -v オプションで確認することができます。
$ cat -v sitemap.pl /usr/bin/perl^M
では、サーバ上で改行コードを変換できないのかというと、そうでもなく、いくつか改行コードを書き換える方法は存在します。一般的には、改行コードの変換だけが目的になるので、sed や perl を使って置換する方法が多いようです。また、Linux であれば、dos2unix というコマンドが標準で用意されている場合が多く、これを利用すれば簡単に変換できます。
$ dos2unix sitemap.pl dos2unix: converting file sitemap.pl to UNIX format ...
結論としては、Windows 上で開発して、ソースリポジトリにコミットする前に改行コードを確認しましょうということです。万が一、LF じゃない改行コードのスクリプトをサーバ上ですぐに実行しないといけないときは、一時的に dos2unix コマンドを利用して、後からリポジトリのソースも修正しておくと安心です。いろいろなお客さんの環境で開発していると、同じような問題に遭遇することはよくあることです。
関連記事
上記の記事に関連する記事(最新の10件)です。


