重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

お世話になっております。

perlスクリプト中でncftpgetを使って、FTPサーバーからファイルをダウンロードするスクリプトを作成しております。
ところがshellでは問題なくいくのですが、perlでは上手くいきません。

<ソースコード>
※$DATE以外は文字列
※$DATE = `date +%Y_%m_%d`;
system "ncftpget -u $USER -p $PASS -a -t 15 -e $WORK_PATH/logfile_$DATE -d $WORK_PATH/logfile_ncftp_$DATE $ADDRESS /tmp /tmp/$FILE 2>> $WORK_PATH/logfile_$DATE 1>/dev/null";

perl -wc ではOKです。
perl -d で行うと、ncftpgetのUsages等(オプションミス等の時に表示されるものです)が表示されてしまい、その後、「-d: 見つかりません。」となってしまいます。

また、上記ソースコードをshellスクリプトでそのまま書き直すと、正常に動きます。
加えて、$DATEのみ適当な文字列(1111や2222)等にすると、問題なく動作します。
$DATEに値が入っていないのか思ったのですが、system関数前後で標準出力させてみると、正常に表示されてます。
$DATE部分に日付を入れたいので、固定にするわけにはいかないですし……。

何故perlだと上手くいかないのでしょうか?

A 回答 (2件)

次の簡単なコードを試してみてください。



$DATE = `date +%Y_%m_%d`;
print "$DATE$DATE\n";

私の使用している VineLinux では、日付が2行に表示されます。日付が2行に表示される場合は、
$DATE の末尾に改行が付着しているので chomp $DATE; とすればうまくいくと思います。
    • good
    • 0
この回答へのお礼

まとめてお返事させていただきすこと、御了承下さい。
お2人とも、ありがとうございました。

お2人方の仰られたように、ソースコード、及び$DATE$DATEををprintで表示したとき、改行が$DATE直後にはいっておりました。

print "ncftpget -u $USER -p $PASS -a -t 15 -e $WORK_PATH/logfile_$DATE
-d $WORK_PATH/logfile_ncftp_$DATE
$ADDRESS /tmp /tmp/$FILE 2>> $WORK_PATH/logfile_$DATE
1>/dev/null";

DATE、シェルの実行結果を変数に入れると、改行はいるんですね……っというか、良く考えればprint "$DATE"したときに改行されている事に気が付けって話ですね(苦笑。

kumoz様が仰られるように、chompで対応できました。
まだまだ勉強足りませんね……。
何はともあれ、お2人とも、ありがとうございました!

お礼日時:2008/05/28 09:31

「system で実行されるはずの文字列」を print で表示したときに, 期待した通りの文字列になってますか?


そして, そこで表示された通りにシェルから起動すると, 正しく動作しますか?
    • good
    • 0
この回答へのお礼

ANo2様にてまとめて回答させて頂きました。

お礼日時:2008/05/28 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!