bash para imprimir log com usuário, data e hora

0

Estou tentando imprimir um log usando bash que captura o texto, o usuário conectado, a data e a hora e imprime-o em um arquivo analysis .

bash

echo "analysis done by" "$USER" "on" && date +"%D"  && date +"%r" > /home/analysis

No entanto, atualmente apenas o tempo é impresso na análise e o echo .... usuário e a data são impressos em stdout . Por que esse é o caso, estou fazendo algo errado? Obrigado.

stdout

analysis done by cmccabe on
07/12/16

resultado desejado (análise)

analysis done by cmccabe on
07/12/16
08:31:32 AM
    
por cm0728 12.07.2016 / 15:38

2 respostas

1

&& (como ; ) é um separador de comando, e os redirecionamentos funcionam no nível comando , não no nível da linha.

Se você quiser que um único redirecionamento seja aplicado a vários comandos de uma só vez, agrupe-os:

(echo "foo"; date +bar) > /path/to/file

{ echo "foo"; date +bar; } > /path/to/file

(Neste caso em particular, não importa se você usa && ou ; .)

Como alternativa, você pode gerar uma única linha com tudo:

echo "analysis done by $USER at $(date "+%D %r")" > /path/to/file
    
por 12.07.2016 / 15:42
0

Adicione %n à string de formato de saída para date onde você deseja uma nova linha.

date +"analysis done by $USER on%n%D%n%r" > /home/analysis

Se houver uma chance de que $USER inclua % :

echo "analysis done by $USER on$(date +%n%D%n%r)" > /home/analysis
    
por 12.07.2016 / 17:47

Tags