2012-02-22 30 views
1

私のスクリプトは、作業が完了してから自動的に削除したいと思います。スクリプトの最後に以下の行を追加しました:スクリプト自体を削除する

unlink($0); 

何らかの理由で、機能しません。私は何をすべきかアドバイスしていただけますか?おそらく、別の方法があるのでしょうか、それとも削除されなかったのかを知るためにエラーメッセージを追加することができますか?

ありがとうございます。

+2

'unlink($ 0)またはdie" $ 0:$! "のリンクを解除できません。何らかの理由で印刷されます。 – Dallaylaen

+0

ゴリと私たちは、自己修正コードが悪いと思っています! – tchrist

答えて

4

私はなぜあなたができないのかわかりません。私のマシンで動作します。ファイルシステムが実行中にファイルシステムをロックすることがあります。

そして、あなたはこれを試してください。rm 1で現在のPerlプロセスを置き換える

exec "rm -f '$0'"; 

。これはあなたのスクリプトをリリースし、それを削除する必要があります。スクリプトの終わりに

+1

はい、これはうまくいった。ありがとうございました。 – Andrew

0

これはできません。あなたのスクリプトはまだ実行されているので、ファイルが使用されているので、それ自体は削除できません。

最初のスクリプトが終了した後に、そのスクリプトを削除するには、外部スクリプトを呼び出す必要があります。

+2

Bashを使ってスクリプト自体を削除することも可能ですので、Perlでも同じことができると思いました。 – Andrew

+1

ほとんどのWindowsのファイルシステムのように、この答えは真です。ほとんどのUnixのようなファイルシステムでは、この答えは偽です。 OSの中には、期待されるファイルシステムの動作をすべてのファイルシステムに適用しようとするものもあれば、プログラムが期待していないものであってもネイティブファイルシステムの動作を適用しようとするものもあります。 –

+0

なぜ世界では、それが実行されているという事実が、リンク解除自体に干渉していますか?それだけではありません。 – tchrist

1

system("sh -c 'sleep 1; rm -f $0' &"); 

ビットハックが、なぜあなたはあなたのスクリプトを削除する必要がありますか?確かにそれは何かがそれを作成したことを意味し、作成者にもそれを削除させてもらえますか?

+0

スクリプトを削除することを忘れることもあるので便利です。スクリプトによってプロダクションサーバー上で何かをした場合、ほとんどの場合、セキュリティ上の理由から、作業の最後に削除する必要があります。 – Andrew

関連する問題