Đầu tiên, nếu bạn đang mong đợi các dấu thời gian này thực sự đại diện cho một sự kiện, hãy nhớ rằng vì nhiều chương trình thực hiện đệm dòng (một số tích cực hơn các chương trình khác), điều quan trọng là phải nghĩ về điều này gần với thời gian mà dòng ban đầu sẽ có đã được in chứ không phải là dấu thời gian của một hành động đang diễn ra.
Bạn cũng có thể muốn kiểm tra xem lệnh của bạn chưa có tính năng sẵn có để thực hiện việc này. Ví dụ, ping -D
tồn tại trong một số ping
phiên bản và in thời gian kể từ thời kỳ Unix trước mỗi dòng. Tuy nhiên, nếu lệnh của bạn không chứa phương thức riêng, có một số phương thức và công cụ có thể được sử dụng, trong số các phương thức khác:
Vỏ POSIX
Hãy nhớ rằng vì nhiều shell lưu trữ các chuỗi bên trong của chúng dưới dạng các chuỗi, nếu đầu vào chứa ký tự null ( \0
), nó có thể khiến dòng kết thúc sớm.
command | while IFS= read -r line; do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line"; done
GNU awk
command | gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }'
Perl
command | perl -pe 'use POSIX strftime; print strftime "[%Y-%m-%d %H:%M:%S] ", localtime'
Con trăn
command | python -c 'import sys,time;sys.stdout.write("".join(( " ".join((time.strftime("[%Y-%m-%d %H:%M:%S]", time.localtime()), line)) for line in sys.stdin )))'
Hồng ngọc
command | ruby -pe 'print Time.now.strftime("[%Y-%m-%d %H:%M:%S] ")'