Limpa o arquivo de saída redirecionado do comando com falha

0

Ao fazer:

CMD > file.out

se o CMD falhar (código de saída diferente de zero), 'file.out' estará vazio ou incompleto.

Estou procurando uma maneira de limpar caso o CMD falhe.

Quando o CMD é executado em um trabalho CRON, prefiro que o arquivo de saída direcionado seja excluído, em vez de deixar um arquivo vazio / incompleto para trás.

Minha ideia inicial era:

if ! CMD > file.out; then rm file.out; fi

No entanto, ele oculta o status de saída do CMD, tornando-o inadequado. (especialmente para CRON)

  • Alguém pode pensar em uma solução melhor?
  • Existe alguma funcionalidade no bash ou sh que permitiria isso?
  • Eu estava esperando que talvez haja algum utilitário 'tee' que possa:
    • Ele redirecionaria a saída do STDOUT para um arquivo
    • Se o comando falhar, removeria o arquivo de saída
    • Em todo caso, retornaria o código de saída do CMD
por Alex 28.02.2018 / 05:41

1 resposta

0

Sua ideia inicial é boa e pode ser expandida para

if ! CMD >file.out; then rm file.out; exit 1; fi

Se você precisar capturar o status de saída específico de CMD , faça isso e exit com ele mais tarde:

if ! CMD >file.out; then err="$?"; rm file.out; exit "$err"; fi

Não é possível usar exit "$?" , pois nesse momento, rm modificou $? .

tee sempre criará seu arquivo de saída, independentemente de os dados estarem disponíveis para serem inseridos, portanto, você terá o mesmo problema que teve desde o início.

    
por 28.02.2018 / 10:32