Czy istnieje lepszy sposób na utworzenie znacznika czasu przed echo
?
Obecnie robię to w ten sposób:
#!/bin/sh
if mount | grep -q /mnt/usb; then
echo `date +%R\ ` "usb device already mounted"
else
echo `date +%R\ ` "mounting usb device..."
mount -t msdosfs /dev/da0s1 /mnt/usb
if mount | grep -q /mnt/usb; then
echo `date +%R\ ` "usb device successfully mounted"
fi
fi
Dane wyjściowe powinny wyglądać mniej więcej tak:
10:36 usb device already mounted
shell
timestamps
echo
TaXXoR
źródło
źródło
echo_time
zrobi to, czego oczekujesz, dopóki twoja wiadomość nie będzie miała%
znaku. Niezbyt solidne rozwiązanie.echo_time
mogłaby po prostu użyć konstrukcji daty + echa OPOto bardziej niezawodny i przenośny (POSIX) sposób, aby to zrobić, szczególnie taki, który pozwala
%
pozostać nieprzetworzonym jako argument:źródło
Możesz utworzyć zmienną dla
date +%R
:źródło
W
ksh93
najnowszych wersjachbash
:Z
zsh
:Lub, aby uniknąć szybkiego rozszerzenia w
"$@"
części:Hacky sposób dla starszych wersji
bash
:Właściwie, jeśli chodzi o to, aby:
Mógłbyś:
Lub, aby uniknąć rozwidlenia podpowłoki:
Następnie:
(zauważ, że są one powtarzane na stderr, co w rzeczywistości może być lepsze).
źródło
Kiedy robię takie rzeczy, zwykle chcę, aby wszystkie linie (w tym dane wyjściowe programu) były oznaczone znacznikiem czasu. Dlatego użyłbym czegoś takiego:
Jak wskazuje Stephane poniżej, poszczególne programy mogą buforować swoje dane wyjściowe po wysłaniu do potoku. Oczywiście bufory te zostaną opróżnione po wyjściu z programu, więc w najgorszym przypadku znaczniki czasu pokażą, kiedy program zakończy działanie (jeśli buforuje dane wyjściowe i nie drukuje wystarczająco dużo, aby wypełnić bufor). Jednak wszystkie
echo
znaczniki czasu będą dokładne.Jako próbka do przetestowania:
Wynik:
źródło
ts
polecenia, które jest częścią moreutils. Jest to podobny skrypt perla, ale z różnymi opcjami formatu znacznika czasu itp.ts
? Wygląda na to, że byłaby to najlepsza opcja tutaj.Tworzenie znaczników czasu za pomocą
ts
zainstaluj narzędzie
ts
(część pakietumoreutils)
:Dodanie znacznika czasu do wyniku:
wynik:
źródło
źródło