Eu tenho um script que precisa criar arquivos temporários para o seu trabalho e limpar depois de si mesmo. Minha pergunta é sobre como encontrar o diretório base correto para os arquivos temporários.
O script precisa funcionar em várias plataformas: Git Bash (Windows), Solaris, Linux, OSX. Em cada plataforma, o diretório temporário preferido é expresso de maneira diferente:
- Windows:
%TMP%
(e possivelmente%TEMP%
) - OSX:
$TMPDIR
- Linux, UNIX: deveria estar,
$TMPDIR
mas parece não estar configurado em vários sistemas que tentei
Então, no meu script, adicionei este boilerplate:
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
Isso parece muito entediante. Existe uma maneira melhor?
shell-script
directory
tmp
Pare o dano contínuo a Monica
fonte
fonte
${TMPDIR-/tmp}
no Unix-likes.TMPDIR
existe (pelo sistema ou administrador ou usuário) para informar quando não usar/tmp
em arquivos temporários.Respostas:
Uma maneira um pouco mais portátil de lidar com arquivos temporários é usar
mktemp
. Ele criará arquivos temporários e retornará seus caminhos para você. Por exemplo:Você pode usá-lo em um script facilmente:
Lendo a página de manual, você poderá definir opções de acordo com suas necessidades. Por exemplo:
-d
cria um diretório em vez de um arquivo.-u
gera um nome, mas não cria nada.Usando
-u
você pode recuperar o diretório temporário facilmente com ...Mais informações sobre
mktemp
estão disponíveis aqui .Editar sobre o Mac OS X: Eu nunca usei um sistema Mac OSX, mas de acordo com um comentário de Tyilo abaixo, parece que o Mac OSX
mktemp
exige que você forneça um modelo (que é um argumento opcional no Linux). Citação:A página de manual também diz que essa implementação é inspirada na página de manual do OpenBSD
mktemp
. Portanto, uma divergência semelhante pode ser observada pelos usuários do OpenBSD e FreeBSD (veja a seção Histórico ).Agora, como você provavelmente notou, isso exige que você especifique um caminho completo do arquivo, incluindo o diretório temporário que você está procurando na sua pergunta. Este pequeno problema pode ser tratado com o
-t
interruptor. Embora essa opção pareça exigir um argumento (prefix
), parece que semktemp
baseia$TMPDIR
quando necessário.Em suma, você deve conseguir o mesmo resultado acima usando ...
Qualquer feedback dos usuários do Mac OS X será muito apreciado, pois não consigo testar esta solução.
fonte
gitbash
uma interface shell, portanto, meu "ligeiramente". Eu realmente seria incapaz de dizer onde os arquivos temporários são armazenados em um sistema Windows ...c:\User\Name\..............\stuff
. E provavelmente existem 100 deles. Ainda assim, algumas distribuições linux estão chegando ao mesmo nível de loucura/var
. Eu só estava curioso. Pareceu-me uma maneira estranha de dizer tudo - na minha experiência, a frustração é muito portátil e a conveniência, menos. Muito boa resposta de qualquer maneira.WINDOWS/Temp
ouWindows/Temp
como o diretório padrão para seus arquivos temporários; esse diretório também existe nas máquinas com Windows 7. Mas meu script permite que o usuário forneça um diretório temporário alternativo na linha de comando.mktemp
.mktemp
simplesmente funciona: simplemktemp
retorna um arquivo emktemp -d
retorna um diretório; nenhum modelo é necessário. O manual não é atualizado.Se você está procurando a mesma coisa em menos linhas ...
Você poderia escrever isso em um.
fonte
Você pode fazer:
O shell deve encontrar um diretório executável em uma das 4 alternativas ou sair com um erro significativo. Ainda assim, o POSIX define a
$TMPDIR
variável (para sistemas XCU) :Também requer o
/tmp
caminho.fonte