Сохранять настройки IP Link при перезагрузке

Это не ответ на поставленный вопрос, а лишь отступление, показывающее, что предпосылка исходного вопроса, что "временный файл ... должен быть удален вручную", совершенно неверна.

(Я опубликовал этот "ответ" в том случае, если заметить, что эта предпосылка ложна, позволит ОП и другим людям не стесняться использовать временные файлы. Во многих случаях использование временных файлов делает скрипты более надежными и более простыми в сопровождении.)

Если скрипту Bash необходимо использовать один или несколько временных файлов, я всегда использую следующий подход:

#!/bin/bash
work="$(mktemp -d)" || exit 1
trap "cd / ; rm -rf '$work'" EXIT

Здесь используется помощник mktemp для создания временного рабочего каталога (в /tmp/). Если mktemp недоступен или каталог не может быть создан, сценарий прерывается.

Чтобы автоматически удалить рабочий каталог и все файлы, которые он может содержать, мы устанавливаем ловушку EXIT. Эта ловушка срабатывает - то есть bash выполняет указанную команду - всякий раз, когда shell завершает работу; будь то обычный выход или из-за ошибки.

Команда EXIT trap переходит в корневой каталог (просто чтобы убедиться, что текущий рабочий каталог не находится во временном каталоге), а затем удаляет все поддерево. Обратите внимание, что поскольку команда заключена в двойные кавычки, $work оценивается при установке ловушки; это означает, что даже если вы измените значение переменной work позже в сценарии, ловушка все равно удалит исходный временный каталог.

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

Поэтому любые временные файлы, созданные под $work, например "$work/1", "$work/result" и так далее, автоматически удаляются, как и сам временный каталог $work, после завершения работы скрипта.

2
26.11.2018, 02:11
0 ответов

Теги

Похожие вопросы