comando de fecha, retrocediendo uno o dos días. Ver diferentes banderas

comando de fecha, retrocediendo uno o dos días. Ver diferentes banderas

Estoy escribiendo un script bash que debería ejecutarse en OSX y Ubuntu. No estoy seguro de si este problema en particular se debe a una discrepancia en el sistema operativo; ¿Lo más probable es que sea una diferencia en el comando de fecha en los dos shells, aunque sea bash en ambos? Vamos a ver.

En el shell bash de OSX, para imprimir una fecha de hace dos días, hacemos esto:

date -v-2d +"%Y"."%m"."%d"

Sin embargo, esa -vbandera no es válida en el shell bash de Ubuntu. En cambio, estamos usando:

date --date="2 days ago" +"%Y"."%m"."%d"

Desafortunadamente, la --datebandera no se reconoce en nuestro shell bash de OSX.

Me encantaría tener un comando con indicadores que funcionen en ambos casos. ¿Alguien sabría qué podría probar?

Respuesta1

dateno es bashincorporado. Es una utilidad del sistema y eso es algo en lo que OSX y Linux difieren. OSX usa herramientas BSD mientras que Linux usa herramientas GNU. Son similares pero no iguales.

Como has encontrado,en OSX, la -dbandera para datecontrolar el horario de verano, mientras que en Linux establece la hora de visualización. En OSX, -vajusta la fecha de visualización pero, en Linux, la -vbandera es una opción no válida.

En su mayor parte, tanto BSD como GNU se esfuerzan por lograr la compatibilidad con el estándar POSIX. si lo compruebasel estándar POSIX paradate, sin embargo, verás que no sirve de nada en este caso: no admite ninguna sintaxis para ajustar la fecha.

Si desea que su código funcione en ambas plataformas, intente:

[ "$(uname)" = Linux ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

O (requiere bash):

[ "$OSTYPE" = linux-gnu ] && date --date="2 days ago" +"%Y"."%m"."%d" || date -v-2d +"%Y"."%m"."%d"

Respuesta2

Conksh93(que en mi humilde opinión es mucho mejor queintentopara secuencias de comandos) puede utilizar el printfincorporado, por ejemplo:

printf '%(%Y.%m.%d)T' '2 days ago'

información relacionada