2012-02-22 4 views
1

Я хочу, чтобы мой скрипт автоматически удалялся автоматически, так как его работа выполнена. Я добавил строку ниже до конца моего сценария:Удалить сам скрипт

unlink($0); 

По некоторым причинам он не работает. Не могли бы вы посоветовать, что мне делать? Возможно, есть другой подход или я могу добавить сообщение об ошибке, чтобы узнать, почему он не удален?

спасибо.

+2

'unlink ($ 0) или умереть« Невозможно отменить связь $ 0: $! "; 'напечатает" некоторые причины ". – Dallaylaen

+0

Golly и мы усета думаем, что самомодифицированный код был плохим! – tchrist

ответ

4

Я не знаю, почему вы не можете. Он работает на моей машине. Возможно, ваша файловая система блокирует файл, когда он запущен.

И пожалуйста, попробуйте следующее:

exec "rm -f '$0'"; 

, который заменит текущий процесс Perl с rm один. Это должно освободить ваш скрипт и удалить его.

+1

Да, это сработало. Спасибо. – Andrew

0

Вы не можете этого сделать. Ваш скрипт все еще работает, поэтому файл будет использоваться, поэтому он не может удалить себя.

Чтобы удалить первый скрипт после его смерти, необходимо вызвать внешний скрипт.

+2

С помощью Bash можно удалить скрипт, поэтому я подумал, что можно было бы сделать то же самое на Perl. – Andrew

+1

В большинстве Windows, таких как файловые системы, этот ответ верен. В большинстве файловых систем Unix этот ответ неверен. Некоторые ОС пытаются применить свою собственную ожидаемую поведение файловой системы ко всем файловым системам, некоторые пытаются применить поведение собственной файловой системы, даже если это не то, что ожидала программа. –

+0

Почему в мире происходит то, что он работает, вмешиваясь в его самопроизвольное перемещение? Это не так. – tchrist

1

в конце сценария:

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

Bit Hacky, но почему вы должны удалить скрипт? Несомненно, это означает, что что-то его создало, почему бы не создать его тоже?

+0

Это просто удобно, так как иногда люди забывают удалить скрипты. Если мы сделали что-то на рабочем сервере по сценарию, в большинстве случаев его следует удалить в конце работы по соображениям безопасности. – Andrew