2017-12-03 4 views
0

私はいつも動作していた古いperlスクリプトを持っていますが、突然何かが破損してファイルを削除していません。Perlスクリプトからファイルを削除できません

-rw-r--r-- 1 nobody uworld   6 Dec 03 11:15 shot32.file 

上記のファイルを削除するコマンドは、私は$のshotfileをチェックしたperlスクリプト

`rm $shotfile`; 

内でshot32.fileあり、それは右の場所です。 ファイルの場所とファイル名は問題ではありません。

パーミッションに関しては、perlスクリプトはnobodyユーザのもとでも実行されているので、これがうまくいかない他の理由は何でしょうか。

あなたのお手伝いをお待ちしております。

+0

ファイルを削除するためのシェルプログラムです。素晴らしいプログラムではありません。 '\' rm $ shotfile \ ''を$ shotfileまたはdie qqのリンクを解除するように変更します。 "$ shotfile":$!} 'を削除できません。 – Borodin

+0

さて、どのようなエラーがありましたか? 'rm'は失敗時にSTDERRにエラーメッセージを出します。 – ikegami

答えて

14

ファイルを削除するには、そのファイルが存在するディレクトリに対して書き込み権限が必要です。ファイルの権限は関係ありません。

これは、あなたがそこにいるかなりひどいコードです。 rm(これはシェルを経由せずに直接実行することができます)を実行するだけで、何もエスケープしないで、シェルの注入を逃さずにシェルリングしているので、何の理由もなく出力をキャプチャしています。とにかくキャプチャされたもの)。また、あなたはエラーをチェックしていません(このフォームでも難しくなります)。

これは、はるかに複雑である必要があります。

unlink $shotfile or warn "$0: can't unlink $shotfile: $!\n"; 

これは、ファイルを削除したり、任意の問題について警告を表示します($!と失敗の理由を含む):Perlはファイルを削除するための機能を内蔵しています。代わりにプログラムを中止する場合は、warndieに変更してください。

+0

メルポメーネありがとう、アンリンクはうまくいくが、rmは変だ.. – HungryProgrammer

関連する問題