• ベストアンサー

SolarisからLinuxへコピーしたスクリプトについて

Solaris上で動作しているPerlスクリプトがあるのですが、 Linux上で動作させることができないので、困っています。 原因を特定するため、Solarisからコピーしたファイルの 中身を、下記コードに入れ替えた場合と、新規にLinux 上で作成した場合を比べてみると、表示結果が異なります。 solarisからコピーしたファイルを表示すると、 「500 サーバ内エラー サーバー内で、実行中のプログラムが異常終了しました。」 と表示されます。 新規にLinux上で作成したファイルを表示すると、 問題なく表示されます。 これくらいしか分からないのですが、何かアドバイスを いただけないでしょうか? # file test.pl <-Solarisからコピーしたファイルを編集 script text executablerl # file test2.pl <-Linux上で新規作成 test.pl: a /usr/bin/perl script text executable ・コード #!/usr/bin/perl print "Content-type: text/plain\n"; print "\n"; print "Hello!World"; exit(0);

質問者が選んだベストアンサー

  • ベストアンサー
  • haru44
  • ベストアンサー率60% (12/20)
回答No.4

\r\n を \n にするには、例えば vi なら $ vi -b filename[Enter] (全ての行の最後に ^M がくっついている) :%s/[^V][^M]//[Enter] [^V]のところはコントロール+V [^M]のところはコントロール+M 画面上は↓こうなります。 :%s/^M// Enter を押すと ^M が消えますので :wq とやって保存します。

その他の回答 (4)

回答No.5

もう解決しているかも知れませんが、vi以外でやる方法を書いておきます。 * Perlでやる場合 perl -i.bak -pe 's/\r//' test.pl バックアップが test.pl.bak で残ります。 * sedでやる場合 sed 's/\r//' tetst.pl >tmp mv tmp test.pl

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

noboruが述べているので正しいように思いますが、少し補足を。500エラーが出力された場合、Webサーバのエラーログにその内容が出力されます。 また、Web経由ではなく、コマンドラインから正しいHTTPレスポンスが出力されるかどうかを確認することもできます。 $ perl test.pl

回答No.2

そのプログラムはどのようにして Solaris のマシンから Linux のマシンへ転送しましたか? (直接 Linux の方から ftp で Solaris の方にログインして転送してますか?) どうしてこういう質問をするのかというと、間に Windows (あるいは改行コードのデフォルトが CR/LF のOS) が介在していて、 Solaris -> Windows -> Linux という風に ftp で転送した場合、全ての転送をバイナリモードで行わないと改行コードが \n (LF) から \r\n (CR/LF) に変わるからです。 改行コードが変わった場合は cat file.pl とやっても変わったことはわかりません。od -c で改行が \r \n になっていないかを見る必要があります。

level30
質問者

お礼

ありがとうございます。 実行結果は、下記のようになりました。 これは、改行コードが入っているということになるのでしょうか? もし、そうでしたら、再度改行コードを\n(LF)にする方法はあるの でしょうか? # od -c test.pl 0000000 # ! / u s r / b i n / p e r l \r 0000020 \n p r i n t " C o n t e n t - 0000040 t y p e : t e x t / p l a i n 0000060 \ n " ; \r \n p r i n t " \ n " 0000100 ; \r \n p r i n t " H e l l o ! 0000120 W o r l d " ; \r \n \r \n e x i t ( 0000140 0 ) ; \r \n \r \n 0000147 # od -c test2.pl 0000000 # ! / u s r / b i n / p e r l \n 0000020 p r i n t " C o n t e n t - t 0000040 y p e : t e x t / p l a i n \ 0000060 n " ; \n p r i n t " \ n " ; \n 0000100 p r i n t " H e l l o ! W o r 0000120 l d " ; \n \n e x i t ( 0 ) ; \n \n 0000140

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

コピーしたファイルの実行権限を付け忘れているってことはないですか?

関連するQ&A