改行コードを変更する(dos2unix編)

サラトガIT日記 > Linux(UNIX) > 改行コードを変更する(dos2unix編) 改行コードを変更する(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件)です。