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

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

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

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 コマンドを利用して、後からリポジトリのソースも修正しておくと安心です。いろいろなお客さんの環境で開発していると、同じような問題に遭遇することはよくあることです。

最終更新日:

関連記事

人気記事

新着情報