У меня есть скрипт, который должен создавать временные файлы для своей работы и очищать после себя. Мой вопрос о том, чтобы найти правильный базовый каталог для временных файлов.
Скрипт должен работать на нескольких платформах: Git Bash (Windows), Solaris, Linux, OSX. На каждой платформе предпочтительный временный каталог выражается по-разному:
- Windows:
%TMP%
(и возможно%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: должен быть,
$TMPDIR
но, похоже, не установлен на нескольких системах, которые я пробовал
Итак, в моем сценарии я добавил этот шаблон:
if test -d "$TMPDIR"; then
:
elif test -d "$TMP"; then
TMPDIR=$TMP
elif test -d /var/tmp; then
TMPDIR=/var/tmp
else
TMPDIR=/tmp
fi
Это кажется слишком утомительным. Есть ли способ лучше?
shell-script
directory
tmp
Прекратить постоянный вред Монике
источник
источник
${TMPDIR-/tmp}
на Unix-лайки.TMPDIR
есть (система или администратор или пользователь), чтобы сказать вам, когда не следует использовать/tmp
для временных файлов.Ответы:
Несколько более портативный способ обработки временных файлов - использовать
mktemp
. Он создаст временные файлы и вернет вам их пути. Например:Вы можете использовать его в скрипте довольно легко:
Читая справочную страницу, вы сможете настроить параметры в соответствии с вашими потребностями. Например:
-d
создает каталог вместо файла.-u
генерирует имя, но не создает ничего.Используя его,
-u
вы можете легко получить временный каталог с помощью ...Более подробная информация
mktemp
доступна здесь .Редактирование, касающееся Mac OS X: я никогда не использовал систему Mac OSX, но согласно комментарию Tyilo ниже, похоже, что Mac OSX
mktemp
требует , чтобы вы предоставили шаблон (который является необязательным аргументом в Linux). Цитирование:Страница руководства также говорит, что эта реализация основана на странице руководства OpenBSD
mktemp
. Поэтому подобное расхождение может наблюдаться и пользователями OpenBSD и FreeBSD (см. Раздел « История »).Теперь, как вы, вероятно, заметили, для этого необходимо указать полный путь к файлу, включая временный каталог, который вы ищете в своем вопросе. Эта небольшая проблема может быть решена с помощью
-t
переключателя. В то время как эта опция, кажется, требует аргумента (prefix
), кажется, что онаmktemp
полагается$TMPDIR
при необходимости.В общем, вы должны быть в состоянии получить тот же результат, что и выше, используя ...
Буду признателен за любые отзывы пользователей Mac OS X, так как я не могу самостоятельно протестировать это решение.
источник
gitbash
получить интерфейс оболочки, следовательно, мой "немного". Я на самом деле не смогу сказать, где временные файлы хранятся в системе Windows ...c:\User\Name\..............\stuff
. И их, наверное, 100. Тем не менее, некоторые дистрибутивы Linux приближаются к тому же уровню безумия в/var
. Мне просто было любопытно. Мне показалось странным сказать, что это все - по моему опыту разочарование очень переносимо, а удобство меньше. В любом случае, очень хороший ответ.WINDOWS/Temp
илиWindows/Temp
как каталог по умолчанию для своих временных файлов; этот каталог также существует на компьютерах с Windows 7. Но мой сценарий позволяет пользователю указать альтернативный временный каталог в командной строке.mktemp
.mktemp
просто работает: simplemktemp
возвращает файл иmktemp -d
возвращает каталог; шаблоны не требуются. Руководство не обновляется , хотя.Если вы ищете то же самое в меньшем количестве строк ...
Вы могли бы написать это в одном.
источник
Вы могли бы сделать:
Оболочка должна либо найти исполняемый каталог в одном из 4 вариантов, либо завершить работу со значительной ошибкой. Тем не менее, POSIX определяет
$TMPDIR
переменную (для систем XCU) :Это также требует
/tmp
пути.источник