У меня есть сценарий, который записывает временные файлы, чтобы помочь в его выполнении. В конце моего сценария я просто вызываю rm filename
для очистки файлов temp, которые я создал. Проблема заключается в том, когда скрипт заканчивается из-за ошибки или прерывается. В этих случаях заявление rm
никогда не достигается, и поэтому файлы никогда не очищаются. Есть ли способ указать некоторую команду для запуска на выходе независимо от того, был ли это успешный выход?Есть ли способ выполнить команду при выходе (независимо от того, как вышел скрипт)?
ответ
Для прерываний вы можете использовать onintr
, чтобы указать обработчик, который удаляет файлы, а затем выходит.
Да; Вы можете написать:
trap 'rm filename' EXIT
(см. описание trap
в §4.1 "Bourne Shell Builtins" of the Bash Reference Manual)
Естественно, существуют чрезвычайные обстоятельства, когда команда не будет запускать — например, если кто-то вдруг отключит машину, или даже просто отправляет SIGKILL
в экземпляр Bash, запускающий скрипт —, но это примерно так же надежно, как вы можете получить.
Да, вы можете использовать trap
так:
trap "rm -f filename" EXIT
Сценарий может выглядеть следующим образом:
#/bin/bash
trap "rm -f filename" EXIT # remove file when script exits
touch filename # create file
some-invalid-command # trigger an error
Для прерываний: установить скрипт для улавливания сигналов, как SIGHUP и SIGTERM. Это поможет вам обойти все, кроме SIGKILL (которые невозможно поймать). Google «ловушка сигнал Баша скрипт»
Для nonsuccessful выхода: структура вы код таким образом, что вы вызываете функцию ет файл (или просто положить заявление), прежде чем выйти из сценария
- 1. Есть ли способ выполнить команду в поведении от eventrigger?
- 2. Есть ли способ измерить эффективность программы независимо от процессора?
- 3. JOIN - независимо от того,
- 4. Выполнить код при выходе приложения
- 5. Есть ли способ написать функцию bash, которая прерывает выполнение, независимо от того, как она называется?
- 6. Есть ли способ выполнить системную команду с заданным приоритетом?
- 7. Есть ли способ узнать, удалили ли браузер cookie при выходе?
- 8. Есть ли способ выразить инструкции OpenGL независимо от языка?
- 9. Есть ли способ увеличить ширину теневой коробки независимо от высоты?
- 10. Как запустить команду phpunit в командной строке Windows независимо от того, в какой директории я нахожусь?
- 11. Как выполнить команду терминала через php-скрипт
- 12. Есть ли способ выполнить скрипт MATLAB через Javascript?
- 13. Есть ли способ выполнить скрипт python внутри программы vb
- 14. пакетный скрипт, чтобы выполнить команду терминала
- 15. Есть ли способ выполнить некоторый код, когда обещание заполнено, независимо от результата?
- 16. Есть ли общий способ удалить подпапку из URL, независимо от того, где он находится (.htaccess)
- 17. Есть ли способ запуска мыши при выходе из тела документа?
- 18. Как выполнить пользовательскую команду в Баш скрипт
- 19. prettyPhoto скрипт не называется независимо от того, что
- 20. Как выполнить скрытую команду в CMD и выходе
- 21. PHP-скрипт, независимо от `set_time_limit (0);`
- 22. Выполнить скрипт от кнопки HTML
- 23. Повторяя независимо от того, как я ввожу
- 24. Как выполнить рекурсию независимо от имени функции?
- 25. Есть ли способ выполнить атомную сборку CMake?
- 26. Есть ли способ запустить команду «createrepo» на окнах?
- 27. выполнить команду telnet через perl-скрипт
- 28. На какой строке вышел скрипт?
- 29. Есть ли способ выполнить команду cli при редактировании файла в NERDTree (vim)?
- 30. Есть ли способ сократить команду в VIM?
здесь см - может быть, что вы ищете http://stackoverflow.com/questions/64786/error-handling-in-bash – repoman