Redireciona a saída stdout / stderr para o arquivo de log com timestamp

0

Estou tentando redirecionar o stdout e o stderr para um arquivo de log. O nome do arquivo deve ser criado dinamicamente com o timestamp atual.

Eu posso criar o nome do arquivo com o seguinte comando:

$ date +%Y-%m-%d_%H-%M-%S.txt
2018-04-10_16-55-55.txt

Então, quero fazer algo assim:

mycommand &> (date +%Y-%m-%d_%H-%M-%S.txt)

Mas isso não funciona ( -bash: syntax error near unexpected token ('')

    
por Caner 10.04.2018 / 16:01

2 respostas

2

Sim, você precisará usar uma substituição de comando:

mycommand &> "$(date +%Y-%m-%d_%H-%M-%S.txt)"

Qual é bash -speak para

mycommand  >"$(date +%Y-%m-%d_%H-%M-%S.txt)" 2>&1

Qual é o mesmo que

mycommand  >"$(date +%F_%H-%M-%S.txt)" 2>&1

( %F é o mesmo que %Y-%m-%d )

Uma substituição de comando, $(...) , será substituída pela saída do comando dentro.

O que você usou foi um sub-shell, (...) . Um sub-shell não pode aceitar redirecionamentos como esse.

    
por 10.04.2018 / 16:20
1

Tente isto:

today='date +%Y-%m-%d_%H-%M-%S'; mycommand > ${today}.txt 2>&1
    
por 10.04.2018 / 16:20