una - variables de entorno linux bash
Crear variable de marca de tiempo en el script bash (8)
El formato ISO 8601 ( 2018-12-23T12:34:56
) es más legible que la marca de tiempo UNIX. Sin embargo, en algunos sistemas operativos no puede tener :
en los nombres de archivo. Por lo tanto, recomiendo usar algo como esto en su lugar:
2018-12-23_12-34-56
Puede usar el siguiente comando para obtener la marca de tiempo en este formato:
date +%Y-%m-%d_%H-%M-%S
Este es el formato que he visto usar muchas aplicaciones. Otra cosa buena de esto es que si los nombres de los archivos comienzan con esto, puede ordenarlos alfabéticamente y se clasificarán por fecha.
Estoy intentando crear una variable de marca de tiempo en un script de shell para facilitar un poco el registro. Quiero crear la variable al comienzo de la secuencia de comandos e imprimirla la hora actual cada vez que emito echo $timestamp
. Resultó ser más difícil de lo que pensaba. Aquí hay algunas cosas que he intentado:
timestamp="(date +"%T")"
imprime el eco (date +"%T")
timestamp="$(date +"%T")"
echo imprime el momento en que se inicializó la variable.
Otras cosas que he probado son solo pequeñas variaciones que no funcionaron mejor. ¿Alguien sabe cómo lograr lo que estoy tratando de hacer?
Estoy usando ubuntu 14.04.
La forma correcta en mi sistema debería ser date +%s
.
La salida de date +%T
es como 12:25:25
.
Para obtener la marca de tiempo actual y no la hora en que se define una variable fija, el truco es usar una función y no una variable:
#!/bin/bash
# Define a timestamp function
timestamp() {
date +"%T"
}
# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...
Si no le gusta el formato dado por el especificador %T
, puede combinar los otros especificadores de conversión de tiempo aceptados por date
. Para la date
GNU, puede encontrar la lista completa de estos especificadores en la documentación oficial aquí: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers
Puedes usar
timestamp=`date --rfc-3339=seconds`
Esto se entrega en el formato 2014-02-01 15:12:35-05:00
Los caracteres de retroceso ( `
) harán que se evalúe lo que hay entre ellos y tengan el resultado incluido en la línea. date --help
tiene otras opciones.
Si desea obtener la marca de tiempo de Unix, necesita usar:
timestamp=$(date +%s)
%T
te dará el tiempo justo; igual que %H:%M:%S
(a través de http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ )
Utilice la sustitución de comandos:
timestamp=$( date +%T )
DATE=`date "+%Y%m%d"`
DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
timestamp=$(awk ''BEGIN {srand(); print srand()}'')
srand sin un valor utiliza la marca de tiempo actual con la mayoría de las implementaciones de Awk.