dポイントプレゼントキャンペーン実施中!

【環境】RedHat Linux as 3
【現在】
 Net-SnmpのTrapHandleを取得し
 標準入力から受けた情報をファイルに出力する処理を作成中です。
出力するファイル名を現在時刻にしたいのですが
 シェルを実行してもファイルが出力されません。
 Perl初心者で手探りで調査していますが煮詰まってしまいました。
 すみませんがご教示願います。

【処理内容】
 ・snmptrapd.conf
 traphandle default /root/bin/trap.sh
・trap.sh
 #!/usr/bin/perl

 @tim = localtime(time);
 $tim[5] += 1900;
 $tim[4] += 1;

 for($idx=0;$idx<5;$idx++){
   $tim[$idx] = sprintf("%02d",$tim[$idx]);
 }

 while (<STDING>) {
   $buf. = $_;
 }

 open (FILE,">>/tmp/$T[5]$T[4]$T[3].txt");
 print FILE $buf;
 print FILE "--------\n";
 close(FILE);

A 回答 (2件)

その三か所を修正すれば動くと思うのですが、それで動かないというのであれば



> open(FILE,">>/tmp/$tim[5]$tim[4]$tim[3].txt");

を、
print "/tmp/$tim[5]$tim[4]$tim[3].txt\n";
open(FILE,">>/tmp/$tim[5]$tim[4]$tim[3].txt") or die $!;

のように変更して、期待通りのファイル名になっているか、
エラーが出ないかどうかを確認してください。

あと、

 @tim = localtime(time);
 $tim[5] += 1900;
 $tim[4] += 1;

 for($idx=0;$idx<5;$idx++){
   $tim[$idx] = sprintf("%02d",$tim[$idx]);
 }

open のときのためだけにこれをしているのであれば、
openのところを

my $filename = sprintf '%4d%02d%02d', $tim[5]+1900, $tim[4]+1, $tim[3];
open FILE, '>>', "/tmp/$filename" or die "could not open '$filename'($!)";

のようにしてしまったほうが良いと思います。

入力の whileも気になるけど、こっちはまあいいや。
    • good
    • 0
この回答へのお礼

ご指摘ありがとうございました。
ご指摘通りファイル名が出力されているか、エラーがないか等の
調査を行いファイル名が正しく出力されました。

いろいろ試しながら行っていたので原因ははっきりわかりませんが
ソースはほどんど変更しなかった為
・権限のつけ忘れ
・誤字脱字
の可能性が高いと思います。

お手数お掛けしました。
ありがとうございました。

お礼日時:2008/11/05 20:15

これ、作っている途中のものをそのまま貼り付けてますか?


どうみても単純な typo がいつくもあるんですけど。

STDING → STDIN
$buf. = $_; →  $buf .= $_; ('.' と '=' の間を開けてはダメ)
open (FILE,">>/tmp/$T[5]$T[4]$T[3].txt");
T という配列変数はどこからでてきたのでしょうか?

この回答への補足

ご指摘ありがとうございます。
又、タイプミスが多くご迷惑お掛けしてすみませんでした。
紙に印刷したソースを入力し投稿した為
タイプミスが多くありました。
実際のソースを確認しましたら、
上記の間違いはありませんでした。

下記に修正内容を記述します。

while (<STDIN>) {
   $buf.= $_;
 }

open(FILE,">>/tmp/$tim[5]$tim[4]$tim[3].txt");

補足日時:2008/11/05 09:17
    • good
    • 0

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