Pergunta

Eu sempre ouvi dizer que a maneira correta de encontrar a pasta temporária em uma máquina UNIX foi a olhar para a variável de ambiente TMP. Ao escrever código que trabalhou no Windows, bem como Linux, gostaria de verificar para TEMP e TMP.

Hoje, eu descobri que o meu Ubuntu instalar não tem essa variável de ambiente em tudo.

Eu sei que parece que você sempre pode contar com / tmp estar lá para colocar seus arquivos temporários, mas eu entendi que TMP foi a maneira como o usuário poderia dizer-lhe para colocar os arquivos em algum lugar temporário mais.

É ainda o caso?

Foi útil?

Solução

Você está provavelmente pensando em TMPDIR .

Esta variável deve representar um nome de caminho de um diretório disponibilizados para programas que precisam de um lugar para criar arquivos temporários.

Outras dicas

Uma boa maneira de criar um diretório temporário está usando mktemp, por exemplo.

mktemp -d -t

Desta forma, você pode até se certificar de que seus nomes de arquivo não irá colidir com os arquivos existentes.

POSIX / FHS diz que /tmp é a raiz para arquivos temporários, embora alguns programas podem optar por examinar $TEMP ou $TMP vez.

À semelhança do que @ Chris Lercher disse, acho que isso funciona para mim:

dirname $(mktemp -u -t tmp.XXXXXXXXXX)

Isso não vai realmente criar um arquivo temporário (por causa da bandeira -u para mktemp), mas vou dar-lhe o diretório que arquivos temporários seria escrito. Este trecho funciona em OSX e Ubuntu (provavelmente outro * nix também).

Se você quiser configurá-lo em uma variável, fazer algo como isto:

TMPDIR=`dirname $(mktemp -u -t tmp.XXXXXXXXXX)`
As variáveis ??globais comando.
# prompt>
printenv | sort
$ TMP não é declarar (d)
# So, prompt> (i.e. if [ -d /tmp ] is true)
export TMP="/tmp"

export? Para passar variáveis ??para um subnível.
Além disso, use $ TMPDIR se estiver definido, este é o nome var correto para Linux e, sim, eu uso o / tmp diretório.; arquivos serão apagados pelo menos na reinicialização.!.

FYI - ubuntu (e presumo que outras distros baseadas systemd) faz definir a variável XDG_RUNTIME_DIR - que é um espaço temporário por usuário, por isso, pouco mais seguro do que apenas / tmp:

$ echo $ XDG_RUNTIME_DIR / Run / user / 1000

$ ls -ld $ XDG_RUNTIME_DIR drwx ------ 2 ubuntu ubuntu 40 dezembro 22 15:18 / run / utilizador / 1000

Eu acho XDG_RUNTIME_DIR é mantido por / pam systemd, por isso não será definido em Dockers ou outros ambientes não-Systemd.

Você pode fazer algo como isto em ~ / .bashrc se você gosta:

exportação TEMP = "$ {XDG_RUNTIME_DIR: - / tmp}"

Veja: https://standards.freedesktop.org/basedir-spec/basedir- especificação-latest.html https://www.freedesktop.org/wiki/

Também - parece-me algumas ressalvas com XDG_RUNTIME_DIR e sudo: https: // unix.stackexchange.com/questions/346841/why-does-sudo-i-not-set-xdg-runtime-dir-for-the-target-user

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top