Ответ 1
Вероятно, вы думаете о TMPDIR
.
Эта переменная должна представлять собой путь к директории, доступной для программ, которым требуется место для создания временных файлов.
Я всегда слышал, что правильный способ найти временную папку на машине UNIX - это посмотреть на переменную среды TMP. При написании кода, который работал как в Windows, так и в Linux, я бы проверял TEMP и TMP.
Сегодня я обнаружил, что моя установка Ubuntu не имеет такой переменной среды.
Я знаю, что, кажется, вы всегда можете рассчитывать на /tmp, чтобы туда помещали ваши временные файлы, но я понял, что TMP - это то, как пользователь мог сказать вам, чтобы временные файлы помещались куда-то еще.
Это все еще так?
Вероятно, вы думаете о TMPDIR
.
Эта переменная должна представлять собой путь к директории, доступной для программ, которым требуется место для создания временных файлов.
Хорошим способом создания временного каталога является использование mktemp, например.
mktemp -d -t
Таким образом, вы даже можете убедиться, что имена ваших файлов не будут сталкиваться с существующими файлами.
POSIX/FHS говорит, что /tmp
является корнем для временных файлов, хотя некоторые программы могут вместо этого выбрать $TEMP
или $TMP
.
Подобно тому, что сказал @Chris Lercher, я считаю, что это работает для меня:
dirname $(mktemp -u -t tmp.XXXXXXXXXX)
Это фактически не создаст временный файл (из-за флага -u в mktemp), но он даст вам каталог, в который будут записываться файлы temp. Этот фрагмент работает на OSX и Ubuntu (возможно, и на других * nix).
Если вы хотите установить его в переменную, выполните следующие действия:
TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
# prompt>
printenv | sort
$ TMP не объявляется (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"
export
? Чтобы передать переменные в подоболочку.
Кроме того, используйте $TMPDIR, если он установлен, это правильное имя var для Linux. И Да, я использую каталог /tmp; файлы будут удалены, по крайней мере, при перезагрузке.!.
FYI - ubuntu (и я предполагаю, что другие дистрибутивы на основе systemd) определяет переменную XDG_RUNTIME_DIR - это временное пространство для каждого пользователя, поэтому немного более безопасно, чем просто /tmp:
$echo $XDG_RUNTIME_DIR /Запустить/пользователь/1000
$ls -ld $XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 дек. 22 15:18/run/user/1000
Я думаю, что XDG_RUNTIME_DIR поддерживается systemd/pam, поэтому он не будет установлено в Dockers или других несистемных средах.
Вы можете сделать что-то вроде этого в ~/.bashrc, если хотите:
export TEMP = "$ {XDG_RUNTIME_DIR: -/tmp}"
См: https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html https://www.freedesktop.org/wiki/
Также - мне кажется, некоторые предостережения с XDG_RUNTIME_DIR и sudo: https://unix.stackexchange.com/info/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user