Несколько более портативный способ обработки временных файлов - использовать mktemp
. Он создаст временные файлы и вернет вам их пути. Например:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Вы можете использовать его в скрипте довольно легко:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
Читая справочную страницу, вы сможете настроить параметры в соответствии с вашими потребностями. Например:
-d
создает каталог вместо файла.
-u
генерирует имя, но не создает ничего.
Используя его, -u
вы можете легко получить временный каталог с помощью ...
$ tmpdir=$(dirname $(mktemp -u))
Более подробная информация mktemp
доступна здесь .
Редактирование, касающееся Mac OS X: я никогда не использовал систему Mac OSX, но согласно комментарию Tyilo ниже, похоже, что Mac OSX mktemp
требует , чтобы вы предоставили шаблон (который является необязательным аргументом в Linux). Цитирование:
Например, шаблон может быть любым именем файла, к которому добавлено некоторое число «X» /tmp/temp.XXXX
. Конечные «X» заменяются номером текущего процесса и / или уникальной комбинацией букв. Количество уникальных имен файлов, которые mktemp может вернуть, зависит от количества предоставленных «X»; шесть «X» приведут к выбору mktemp 1 из 56800235584 (62 ** 6) возможных имен файлов.
Страница руководства также говорит, что эта реализация основана на странице руководства OpenBSD mktemp
. Поэтому подобное расхождение может наблюдаться и пользователями OpenBSD и FreeBSD (см. Раздел « История »).
Теперь, как вы, вероятно, заметили, для этого необходимо указать полный путь к файлу, включая временный каталог, который вы ищете в своем вопросе. Эта небольшая проблема может быть решена с помощью -t
переключателя. В то время как эта опция, кажется, требует аргумента ( prefix
), кажется, что она mktemp
полагается $TMPDIR
при необходимости.
В общем, вы должны быть в состоянии получить тот же результат, что и выше, используя ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Буду признателен за любые отзывы пользователей Mac OS X, так как я не могу самостоятельно протестировать это решение.
${TMPDIR-/tmp}
на Unix-лайки.TMPDIR
есть (система или администратор или пользователь), чтобы сказать вам, когда не следует использовать/tmp
для временных файлов.