Le message de Ryan fournit une idée intéressante, mais il échoue à plusieurs égards. En testant avec tail -f /var/log/syslog | xargs -L 1 echo $(date +'[%Y-%m-%d %H:%M:%S]') $1
, j’ai remarqué que l’horodatage reste le même, même s’il stdout
arrive plus tard avec une différence en secondes. Considérez cette sortie:
[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.
La solution proposée est similaire, mais fournit une horodatage correcte et utilise un peu plus de portabilité printf
que deecho
| xargs -L 1 bash -c 'printf "[%s] %s\n" "$(date +%Y-%m-%d\ %H:%M:%S )" "$*" ' bash
Pourquoi bash -c '...' bash
? En raison de l' -c
option, le premier argument est attribué à $0
et ne sera pas affiché dans la sortie. Consultez la page de manuel de votre shell pour la description correcte de-c
Tester cette solution avec tail -f /var/log/syslog
et (comme vous pouvez probablement le deviner) en vous déconnectant et en vous reconnectant à mon réseau wifi, a montré le bon horodatage fourni par les messages date
etsyslog
Bash pourrait être remplacé par n’importe quelle coquille semblable au bourne, pourrait être fait avec l’un ksh
ou l’ autre dash
, du moins ceux qui ont une -c
option.
Problèmes potentiels:
La solution nécessite la xargs
mise à disposition, disponible sur les systèmes compatibles POSIX, de sorte que la plupart des systèmes de type Unix doivent être couverts. De toute évidence, cela ne fonctionnera pas si votre système n’est pas compatible POSIX ou n’a pasGNU findutils