Я использую, чтобы создать tempfile
, удалить его и воссоздать его как каталог:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
Проблема в том, что другой процесс может получить такое же имя X
, если он случайно запускает tempfile после одного процесса rm -f X
и непосредственно перед ним mkdir X
.
bash
temporary-directory
Xiè Jìléi
источник
источник
mktemp -d -t <prefix>
Для более надежного решения я использую что-то вроде следующего. Таким образом, временный каталог всегда будет удаляться после выхода из скрипта.
Функция очистки выполняется по
EXIT
сигналу. Это гарантирует, что функция очистки всегда вызывается, даже если скрипт где-то прерывается.Каталог скриптов bash отсюда .
Баш ловушки .
источник
cleanup
будет rm -rf вашей текущей директории!mktemp
неудачиWORK_DIR
будет пустым, то есть команда будетrm -rf
без аргумента. Я не использую FreeBSD, но я был бы очень удивлен, если бы этоrm -rf
было эквивалентноrm -rf .
TMPWORKDIR=$(basename 'mktemp -d -p /tmp/git/')
а затем 2rmdir /tmp/git/"${TMPWORKDIR}"
.. Если переменная сейчас пуста, вы все равно вернетесь к/tmp/git/
не всей системе. Примите во внимание что-то подобное в ответе, и я с радостью соглашусь. ;)Мой любимый лайнер для этого
источник
rm $(pwd)
? : Ppushd $(mktemp -d)
...popd
rm -r $(pwd)
rm -r $(pwd)
. Рассмотрите возможность того, что создание временного каталога по какой-либо причине завершится неудачно (может быть, файловая система / tmp переполнена или перемонтирована только для чтения из-за ошибки?); затемcd $(mktemp -d)
оценит,cd
какие изменения в домашнем каталоге пользователя будут впоследствии удалены.if pushd $(mktemp -d || echo BADMPDIR); then ........ ; rm -r $(pwd); popd; fi
Следующий фрагмент безопасно создаст временный каталог (
-d
) и сохранит его имя вTMPDIR
. (Пример использованияTMPDIR
переменной показан ниже в коде, где она используется для хранения исходных файлов, которые могут быть изменены).Первая
trap
строка выполняетexit 1
команду при получении любого из указанных сигналов . Втораяtrap
строка удаляет (очищает) выход$TMPDIR
из программы (как нормальный, так и ненормальный). Мы инициализируем эти ловушки после того, как проверим, чтоmkdir -d
удалось избежать случайного выполнения ловушки выхода с$TMPDIR
неизвестным состоянием.источник
-d
проверяет каталоги. 2.) Завершение уже по умолчанию для этих сигналов.