O post de Ryan fornece uma ideia interessante, no entanto, falha em vários aspectos. Ao testar com tail -f /var/log/syslog | xargs -L 1 echo $(date +'[%Y-%m-%d %H:%M:%S]') $1 , notei que o carimbo de data / hora permanece o mesmo, mesmo que stdoutvenha mais tarde com diferença de segundos. Considere esta saída:
[2016-07-14 01:44:25] Jul 14 01:44:32 eagle dhclient[16091]: DHCPREQUEST of 192.168.0.78 on wlan7 to 255.255.255.255 port 67 (xid=0x411b8c21)
[2016-07-14 01:44:25] Jul 14 01:44:34 eagle avahi-daemon[740]: Joining mDNS multicast group on interface wlan7.IPv6 with address fe80::d253:49ff:fe3d:53fd.
[2016-07-14 01:44:25] Jul 14 01:44:34 eagle avahi-daemon[740]: New relevant interface wlan7.IPv6 for mDNS.
Minha solução proposta é semelhante, mas fornece registro de data e hora adequado e usa um pouco mais portátil em printfvez deecho
| xargs -L 1 bash -c 'printf "[%s] %s\n" "$(date +%Y-%m-%d\ %H:%M:%S )" "$*" ' bash
Por que bash -c '...' bash? Porque devido à -copção, o primeiro argumento é atribuído $0e não aparece na saída. Consulte a página de manual do seu shell para obter a descrição adequada de-c
Testar esta solução com tail -f /var/log/sysloge (como você provavelmente poderia adivinhar) desconectar e reconectar-se ao meu wifi mostrou o registro de data e hora adequado fornecido por ambos datee por syslogmensagens
O Bash pode ser substituído por qualquer casco tipo bourne, pode ser feito com um kshou dash, pelo menos, aqueles que têm -copção.
Questões potenciais:
A solução exige ter xargs, disponível em sistemas compatíveis com POSIX, portanto, a maioria dos sistemas semelhantes ao Unix deve ser coberta. Obviamente, não funcionará se o seu sistema não for compatível com POSIX ou não tiverGNU findutils