Удаление созданных временных файлов в неожиданном выходе удара

Ваша функция handleChange требует e, но ваша модель передает ее e.target.value.

85
задан codeforester 20 March 2019 в 21:54
поделиться

5 ответов

Вы могли поставить "капкан" для выполнения на выходе или на управлении-c для чистки.

trap "{ rm -f $LOCKFILE; }" EXIT

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

BTW: Один аргумент я дам в пользу mktemp вместо того, чтобы использовать Ваше собственное решение: если пользователь ожидает, что Ваша программа собирается создать огромные временные файлы, он мог бы хотеть набор TMPDIR к где-нибудь больше, как/var/tmp. mktemp распознает, что, Ваше скрученное вручную решение (вторая опция) не делает. Я часто использую TMPDIR=/var/tmp gvim -d foo bar, например.

82
ответ дан Roland W 24 November 2019 в 08:12
поделиться

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

MYTMPDIR=$(mktemp -d)
trap "rm -rf $MYTMPDIR" EXIT

Если Вы помещаете все свои временные файлы под $MYTMPDIR, затем они будут все удалены, когда Ваш сценарий выйдет при большинстве обстоятельств. Уничтожение процесса с SIGKILL (уничтожают-9) уничтожает процесс сразу же, хотя, таким образом, Ваш обработчик ВЫХОДОВ не будет работать в этом случае.

104
ответ дан Christian Stewart 24 November 2019 в 08:12
поделиться

Вы хотите использовать команду прерывания для обработки выхода из сценария или сигналов как CTRL-C. Посмотрите Wiki Greg для деталей.

Для Вашего tempfiles, с помощью basename $0 хорошая идея, а также обеспечение шаблона, который обеспечивает комнату для достаточного количества временных файлов:

tempfile() {
    tempprefix=$(basename "$0")
    mktemp /tmp/${tempprefix}.XXXXXX
}

TMP1=$(tempfile)
TMP2=$(tempfile)

trap 'rm -f $TMP1 $TMP2' EXIT
22
ответ дан Brian Campbell 24 November 2019 в 08:12
поделиться

Вы не должны потрудиться удалять те tmp файлы, созданные с mktemp. Они будут удалены так или иначе позже.

Используйте mktemp, если Вы можете, поскольку он генерирует более уникальные файлы затем префикс '$$'. И похоже, что больше кросс-платформенного способа создать временные файлы затем явно поместило их в/tmp.

-4
ответ дан Mykola Golubyev 24 November 2019 в 08:12
поделиться

Альтернатива для использования предсказуемого имени файла с $$ является зияющей дырой в системе безопасности, и Вы никогда никогда не должны, думать об использовании его. Даже если это - просто простой персональный сценарий на Вашем отдельном пользователе ПК. Это - очень дурная привычка, которую Вы не должны получать. BugTraq полон "небезопасного временного файла" инциденты. Посмотрите здесь, здесь и здесь для получения дополнительной информации об аспекте безопасности временных файлов.

Я первоначально думал о заключении в кавычки небезопасного TMP1 и присвоений TMP2, но вообще-то, если задуматься который, вероятно, не будет хорошей идеей.

4
ответ дан hlovdal 24 November 2019 в 08:12
поделиться
Другие вопросы по тегам:

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