Следующий фрагмент безопасно создаст временный каталог (-d
) и сохранит его имя в TMPDIR
.(Пример использования переменной TMPDIR
показан ниже в коде, где она используется для хранения исходных файлов, которые могут быть изменены.)
Первая строка trap
выполняет команду exit 1
, когда любой изуказанные сигналы получены.Вторая строка trap
удаляет (очищает) $TMPDIR
при выходе из программы (как нормальную, так и ненормальную).Мы инициализируем эти ловушки после того, как проверим, что mkdir -d
удалось избежать случайного выполнения выходной ловушки с $TMPDIR
в неизвестном состоянии.
#!/bin/bash
# Create a temporary directory and store its name in a variable ...
TMPDIR=$(mktemp -d)
# Bail out if the temp directory wasn't created successfully.
if [ ! -e $TMPDIR ]; then
>&2 echo "Failed to create temp directory"
exit 1
fi
# Make sure it gets removed even if the script exits abnormally.
trap "exit 1" HUP INT PIPE QUIT TERM
trap 'rm -rf "$TMPDIR"' EXIT
# Example use of TMPDIR:
for f in *.csv; do
cp "$f" "$TMPDIR"
# remove duplicate lines but keep order
perl -ne 'print if ++$k{$_}==1' "$TMPDIR/$f" > "$f"
done