Windowsでテキストを扱う時も改行コードはLFにしようと思った話と、パーミッションの変更が面倒な話

WindowsでずっとPerlをやってきたわけですが、Mac(OSX)になって大きく違いを感じるのが、改行コードとパーミッションです。 改行コードの問題については分かっていたはずなのですが、FFFTPの設定によってテキストモード(ASCIIモード)でアップロードされるので、あまり意識していませんでした。 昔は、エディタの改行コードをUNIXタイプ(LF)という風に設定していたのですが、いつの間にかWindowsタイプ(CRLF)になっていたようです。 で、Macになってローカル環境で実行したときに、こんなエラーが出たので、改行コードの違いに気づきました。

1
/usr/bin/perl^M: bad interpreter: No such file or directory

そこで思い出したのが、改行コードを変更するワンライナーでした。 と言っても、ワンライナー自体を思い出したのではなく、そういうワンライナーがある、という記憶を思い出しただけです。 ググって調べた結果に、少しの知識を加えてできたのが、以下のワンライナーです。

1
$ find . -name "*.cgi" | xargs perl -i.bak -pe "s/\x0d\x0a/\x0a/g"

ググッてみると、最後の「g」がなかったり、\x0dと\x0aの事を「\r」「\n」という風に書いていたり、という、ちょっと残念な感じのワンライナーもしばしば見受けられました。 本文のすべての改行を変更するので、置換処理の繰り返し「g」は必要だろうし、\rや\nは改行コード自体を置換するのには不向き、という話があったと思うので。 また、0d0aは時々8進数で(\015\013とか。)書いてあったりするのですが、私の中では16進数で覚えていることもあって、とっさに8進数では出てこないです…。 で、このワンライナーを実行すると、バックアップファイルを作成してもらえるので、もし何かあっても安心ですね。 バックアップファイルを消すときは、こんな感じで。

1
$ find . -name "*.cgi.bak" | xargs rm

あと、ローカル環境で戸惑うのが、パーミッションです。 今まで、あまりにも意識しなさ過ぎたということがよくわかります。 サーバー一式は、結構頑張って設定していたのですが、結局上手くいかなくて、最終的にはXAMPPに落ち着きました。 Apacheの設定は難しいですね…。 で、そのローカルサーバーにアクセスすると、500エラーなわけです。 それで、XAMPPのサーバーのログを見ることになるわけですが、大体が「Permission denied」という事になっていて、ガックリです。 例えば「*.cgi」なファイルは、自動的に実行可能状態で保存するようなソフトはないんでしょうかね。

Comments

comments powered by Disqus