2012-02-22 96 views
1

我想我的脚本自动删除自己,因为它的工作完成。我已将以下行添加到脚本的末尾:删除脚本本身

unlink($0); 

由于某些原因,它不起作用。你能告诉我该怎么办?也许,还有另一种方法,或者我可以添加一条错误消息来找出为什么它不被删除?

谢谢。

+2

'unlink($ 0)or die“无法取消链接$ 0:$!”; “会打印”一些原因“。 – Dallaylaen 2012-02-22 14:05:24

+0

Golly和我们useta认为自我修改代码是坏的! – tchrist 2012-02-23 18:57:44

回答

4

我不知道你为什么不能。它在我的机器中工作。也许你的文件系统在运行时锁定文件。

而且请你试试这个:

exec "rm -f '$0'"; 

其替换为rm一个当前Perl的过程。这应该释放脚本并将其删除。

+1

是的,这个解决了。谢谢。 – Andrew 2012-02-22 13:46:45

0

你不能那样做。您的脚本仍在运行,因此该文件将被使用,这就是为什么它不能自行删除。

您需要调用外部脚本来删除第一个脚本死后。

+2

可以使用Bash删除脚本本身,所以我认为可以在Perl上做同样的事情。 – Andrew 2012-02-22 13:46:16

+1

在大多数Windows上,如文件系统,这个答案是正确的。在大多数Unix上,如文件系统,这个答案是错误的。某些操作系统尝试将自己的预期文件系统行为应用于所有文件系统,有些尝试应用本机文件系统行为,即使这不是程序所期望的行为。 – 2012-02-22 16:57:00

+0

为什么在这个世界上,它正在运行的事实会干扰它的自我解体?事实并非如此。 – tchrist 2012-02-23 18:58:28

1

在脚本的末尾:

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

位哈克,但为什么你需要删除你的脚本?当然,这意味着什么创造了它,为什么不让创作者也删除它?

+0

这只是方便,因为有时人们忘记删除脚本。如果我们通过脚本在生产服务器上执行了某些操作,则在大多数情况下,出于安全原因应该在工作结束时将其删除。 – Andrew 2012-02-22 13:48:24