¿Agregar marcas de tiempo a las indicaciones del terminal?

53

Me preguntaba si era posible agregar marcas de tiempo a las indicaciones de la terminal, y si es así, ¿cómo podría lograr esto?

Jan Gorzny
fuente
consulte este enlace para mostrar el reloj en ejecución sincronizado
Mana

Respuestas:

61

Agregue esta línea al ~/.bashrcarchivo:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Entonces la salida será algo así como:

[07:00:31] user@name:~$
devav2
fuente
A veces experimento que el tiempo no es correcto y es más antiguo, como si hubiera algún tipo de retraso. Pensé que podría usarlo para ver cuánto tiempo demoran ciertos comandos (gruñidos ...). ¿Como puede ser?
Kevin Simper
2
@ devav2: ¿Hay alguna forma de especificar la zona horaria?
Hippo
¿Hay alguna manera de que también pueda agregar una marca de tiempo al terminal cuando está usando root? Solo tengo la marca de tiempo cuando soy un usuario normal. Gracias
Yufenyuy Veyeh Dider
44
Para el datecomando, puede reemplazar +%H:%M:%Scon +%T.
snapfractalpop
55
Esto se atornilló con mi envoltura de terminal, por lo que en su lugar utilicé el enfoque detallado aquí . Simplemente agregue '\ D {% T}' a su PS1
rbennett485
25

Mi solución fue usar http://bashrcgenerator.com/ para generar esta línea PS1 para poner en .bashrc:

export PS1="\t [\u@\h \W]\\$ \[$(tput sgr0)\]"

Que se verá como

13:05:54 [chad@work-laptop:~/Downloads]$ ls -al

Usar PROMPT_COMMAND me confunde el historial. Cuando aparece una línea más larga mientras recorre el historial, corta el final de la solicitud por la misma cantidad de caracteres que la marca de tiempo que se agregó al frente. p.ej

13:14:38 [chad@work-laptop:~/Doexport PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] "

Y esta línea no se puede editar porque no muestra los caracteres en el lugar correcto, ya que no está escribiendo donde parece que está escribiendo.

Supongo que podría hacerse con PROMPT_COMMAND, tal vez usando esa parte [$ (tput sgr0)], pero PS1 funciona.

dogtato
fuente
El enlace aquí es ideal para personalizar aún más los sellos.
cellepo
16

En lugar de agregar la fecha a la solicitud en sí, puede agregar la fecha justo antes de la solicitud colocando la siguiente línea en la parte superior de su .bashrc. Para que funcione también necesitará instalar cowsay. Es una forma divertida de mostrar la fecha manteniendo un breve aviso:

cowsay "Welcome $USER! It's now $(date '+%A %B %d %Y %r')"

En su forma actual, funcionará en el sistema de cualquier persona sin enmiendas, ya que lee $USERla datevariable y la del entorno actual.

ingrese la descripción de la imagen aquí


fuente
8
El punto de ponerlo en el indicador es saber cuándo fue la última vez que ejecutó un comando específico.
James Oltmans
6

Como no tengo suficientes puntos de reputación para agregar un comentario a la respuesta para mejorarlo. Parece que la única forma en que puedo agregar información es crear una segunda respuesta. Entonces, repetiré lo que se dijo como respuesta y construiré sobre eso.

Edite el archivo .bashrc para el usuario para el que desea modificar el sello de fecha.

Si ve "user @ host: ~ $" está en el directorio de inicio de su usuario actual. El archivo .bashrc es un archivo oculto ya que está prefijado con el punto ".". Para verlo en una lista, deberá usar una lista larga.

Puede usar "ls -a" y luego debería ver el archivo ".bashrc".

Edite el archivo con un editor de texto. Por ejemplo, "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" o cualquier editor que desee utilizar.

Si desea escribir esto y planea agregarlo a muchos shells para muchos usuarios, puede ser beneficioso usar el comando "echo" junto con el operador ">>" anexar. Por ejemplo,

echo "export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"" >> .bashrc

Si utiliza ese método, asegúrese de estar en el directorio de trabajo actual del usuario para el que desea modificarlo. Para verificar esto, puede usar el comando "pwd" o imprimir el directorio de trabajo.

Si no le gusta el espacio extra entre el corchete final "]" y el nombre de usuario, use esta expresión regular ligeramente modificada:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"

Use esto si está editando directamente el archivo.

Avlaxis
fuente
1
Puedes sugerir ediciones.
Muru
4
export PROMPT_COMMAND=date

imprime la fecha antes de emitir cada solicitud.

wojox
fuente
1

Abre tu .bashrcvia

vim ~/.bashrc

y luego agregue lo siguiente a .bashrc:

#PS1="[\A \u@\h \W\a]$" 

donde \Aes por tiempo ( \Wsolo para el final de la ruta, elimine si desea toda la ruta actual del directorio de trabajo). Luego escribe

source ~/.bashrc

Verás algo como esto:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
Trwood
fuente
1
eliminar \Wno mostrará ninguna ruta en absoluto. \wdará el camino completo.
Zanna
0

Solo para agregar a la respuesta de @ devav2:

Un comando echo más fácil de leer para los novatos sería:

export PROMPT_COMMAND='echo -n "$(date +%H:%M:%S) "'

En lugar de

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Debido a que el comando echo no está destinado a ser evaluado en el momento de la exportación, tiene más sentido usar comillas simples para comillas literales en lugar de comillas dobles. El uso de comillas simples para citar todo el comando le permite usar comillas dobles para citar el argumento del comando echo, eliminando la necesidad de escapar de caracteres especiales como , [y$

qwertyzw
fuente
1
Los escapes se están utilizando para formatear (los corchetes). No veo lo que esto agrega a la respuesta aceptada.
Élder Geek
Puede agregarlos a 'echo -n "$ (fecha +% H:% M:% S)"' también: 'echo -n "[$ (fecha +% H:% M:% S)]"' sin necesitando escapar de ellos. La ventaja de usar una cadena como argumento para el comando echo es que ahora no necesita escapar de lo que de otro modo sería bash evaluable, lo que hace que sea más fácil de leer.
qwertyzw
@ElderGeek Agregué más aclaraciones. Espero que eso ayude.
qwertyzw
0

Creo que la forma correcta de proceder es ubicar en $HOME/.bashrclos códigos que establece PS1, comentarlos y agregar los personales. Este es mi bloque, por ejemplo:

PS1_DATE="\D{%Y-%m-%d %H:%M:%S}"

if [ "$color_prompt" = yes ]; then
    PS1="[$PS1_DATE \[\e]0; \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[00m\]\[\033[01;34m\]\w \[\033[00m\]\$] "
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='[$PS1_DATE ${debian_chroot:+($debian_chroot)}\w \$] '
    #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Salida:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Marco Sulla
fuente
0

La sintaxis más fácil para mostrar una marca de tiempo en un símbolo del sistema probablemente sería:

    PS1='\D{%F} \t $...'

dónde

\D{format}tiene formato de fecha (consulte man bashla sección PROMOCIÓN) como

%Ffecha completa igual que% Y-% m-% d (ver man datesección FORMATO), y

\tes la hora actual en formato HH: MM: SS de 24 horas (consulte man bashla sección PROMOCIÓN)

nano ~/.bashrc

hacer cambios a las variables de PS1 como se muestra arriba

source ~/.bashrc
Dmitry Somov
fuente
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

al menos me parece útil.

Alexey Shcherbakov
fuente