La publicación de Ryan proporciona una idea interesante, sin embargo, falla en varios aspectos. Mientras probaba tail -f /var/log/syslog | xargs -L 1 echo $(date +'[%Y-%m-%d %H:%M:%S]') $1
, noté que la marca de tiempo se mantiene igual, incluso si stdout
llega más tarde con una diferencia de segundos. Considere esta salida:
[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.
Mi solución propuesta es similar, sin embargo, proporciona una marca de tiempo adecuada y utiliza algo más portátil en printf
lugar deecho
| xargs -L 1 bash -c 'printf "[%s] %s\n" "$(date +%Y-%m-%d\ %H:%M:%S )" "$*" ' bash
¿Por qué bash -c '...' bash
? Debido a la -c
opción, el primer argumento se asigna $0
y no aparecerá en la salida. Consulte la página del manual de su shell para obtener la descripción adecuada de-c
Probar esta solución con tail -f /var/log/syslog
y (como probablemente podría adivinar) desconectarse y volver a conectarse a mi wifi, ha mostrado la marca de tiempo adecuada proporcionada por ambos date
y los syslog
mensajes
Bash podría ser reemplazado por cualquier caparazón similar a bourne, podría hacerse con cualquiera ksh
o dash
, al menos, aquellos que tienen -c
opción.
Problemas potenciales:
La solución requiere tener xargs
, que está disponible en sistemas compatibles con POSIX, por lo que la mayoría de los sistemas tipo Unix deberían estar cubiertos. Obviamente no funcionará si su sistema no es compatible con POSIX o no tieneGNU findutils