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 stdout
venha 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 printf
vez 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 à -c
opção, o primeiro argumento é atribuído $0
e 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/syslog
e (como você provavelmente poderia adivinhar) desconectar e reconectar-se ao meu wifi mostrou o registro de data e hora adequado fornecido por ambos date
e por syslog
mensagens
O Bash pode ser substituído por qualquer casco tipo bourne, pode ser feito com um ksh
ou dash
, pelo menos, aqueles que têm -c
opçã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