Как создать временный каталог?
я использую для создания tempfile
, удалите его и воссоздайте в виде каталога:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
проблема в том, что другой процесс может получить то же имя X
, если он случайно выполняет tempfile после одного процесса rm -f X
и перед mkdir X
.
3 ответа:
использовать
mktemp -d
. Он создает временный каталог со случайным именем и гарантирует, что файл уже не существует. Вы должны помнить, чтобы удалить каталог после его использования, хотя.
для более надежного решения я использую что-то вроде следующего. Таким образом, temp dir всегда будет удален после выхода скрипта.
функция очистки выполняется на
EXIT
сигнал. Это гарантирует, что функция очистки всегда вызывается, даже если сценарий прерывается где-то.#!/bin/bash # the directory of the script DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # the temp directory used, within $DIR # omit the -p parameter to create a temporal directory in the default location WORK_DIR=`mktemp -d -p "$DIR"` # check if tmp dir was created if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then echo "Could not create temp dir" exit 1 fi # deletes the temp directory function cleanup { rm -rf "$WORK_DIR" echo "Deleted temp working directory $WORK_DIR" } # register the cleanup function to be called on the EXIT signal trap cleanup EXIT # implementation of script starts here ...
каталог скрипта bash от здесь.
Баш ловушки.