Existe una mejor manera de crear una marca de tiempo frente a un echo?
Actualmente lo hago de esta manera:
#!/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
fiLa salida debería verse así:
10:36 usb device already mounted
                    
                        shell
                                timestamps
                                echo
                                
                    
                    
                        TaXXoR
fuente
                
                
            fuente

echo_timehará lo que espera, hasta que su mensaje tenga una%señal en él. No es una solución muy robusta.echo_timepodría usar la construcción date + echo del OPAquí hay una forma más robusta y portátil (POSIX) de hacerlo, particularmente una que permite
%permanecer sin procesar como argumento:fuente
Puede crear una variable para
date +%R:fuente
Con
ksh93y versiones recientes debash:Con
zsh:O para evitar una rápida expansión en la
"$@"parte:Una forma hacky para versiones anteriores de
bash:En realidad, si el punto es hacer:
Podrías hacerlo:
O para evitar una bifurcación secundaria:
Entonces:
(tenga en cuenta que estos se repiten en stderr, que en realidad puede ser preferible).
fuente
Cuando hago cosas como esta, generalmente quiero que todas las líneas (incluida la salida de cualquier programa) tengan una marca de tiempo. Por lo tanto, usaría algo como esto:
Como Stephane señala a continuación, los programas individuales pueden amortiguar su salida cuando se envían a una tubería. Por supuesto, estos búferes se enjuagarán cuando el programa salga, por lo que, en el peor de los casos, las marcas de tiempo mostrarán cuándo salió el programa (si amortigua su salida y no imprime lo suficiente para llenar el búfer). Sin embargo, las
echomarcas de tiempo serán todas precisas.Como muestra ejecutable para pruebas:
Salida:
fuente
tscomando que es parte de moreutils. Es un script en perl similar, pero con varias opciones para el formato de fecha y hora, etc.ts? Parece que sería la mejor opción aquí.Crear marcas de tiempo con
tsinstale la herramienta
ts(parte del paquetemoreutils):Agregar una marca de tiempo a una salida:
salida:
fuente
fuente