2012-02-22 99 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