Bash arquivos de log temporários [fechados]

-1

Eu sou um novato em programação shell.

Como eu preciso entregar um programa shell profissional, alguém pode ajudar a esclarecer os três tópicos a seguir:

  1. Modo padrão de criar arquivos temporários e, em seguida, remoção desses arquivos após a execução do programa.

  2. Como ter certeza de que esses arquivos temporários são criados durante a execução do programa atual, para que não sejam excluídos acidentalmente outros arquivos temporários criados por outra instância do mesmo programa.

  3. Criação de arquivos de log para registrar quaisquer erros que ocorram durante a execução do comando.

Qualquer ajuda é muito apreciada.

    
por user261334 26.03.2014 / 07:15

1 resposta

4

Experimente o comando mktemp.

Os arquivos criados por mktemp serão exclusivos dentro do diretório que os contém.

#!/bin/bash
FILENAME=$(mktemp)
echo "Writing out data to $FILENAME"
echo "This is a test" > $FILENAME
rm $FILENAME

Para erros, considere escrever os erros para "Erro padrão":

#!/bin/bash
echo "Everything is fine.."
sleep 1
echo "Oh dear. An error happened" 1>&2
exit

Dessa forma, você pode redirecionar seus erros de script para um arquivo.

$ ./myscript 2>/tmp/errors

Como alternativa, envie seus registros para um servidor syslog local usando o comando "logger".

#!/bin/bash
echo "Everything is fine.."
sleep 1
logger -t "MyApp" "Oh dear. An error happened"
exit

[Editado com mais informações em resposta ao comentário: "Mas eu preciso saber como criar um arquivo temporário com nome previsível como" temp_file.test ", porque isso eu quero usar no meu programa"]

mktemp pode ajudar você lá também. Se você precisa que o arquivo tenha um formato específico, você pode fazer algo como:

$ FILENAME=$(mktemp --tmpdir=/tmp temp_file-XXXXXXXXXX.txt)
$ echo $FILENAME
/tmp/temp_file-HIitKZc0MT.txt

Eu recomendaria não usar nomes de arquivos temporários em diretórios acessíveis ao público (por exemplo: sempre usando "/tmp/MyTempFile.txt") - a menos que você seja muito cuidadoso, é razoavelmente fácil para um invasor fazer algo desagradável e problemas para o seu script - por exemplo:

ln -s /etc/passwd /tmp/MyTempFile.txt
(run your application)

ou (dependendo do que você está usando o arquivo para):

chmod 444 /tmp/MyFile.txt
echo "evil sql command perhaps" > /tmp/MyFile.txt
    
por RedPhoenix 26.03.2014 / 07:28