2 votos

fecha comando ' tiempo valor Nota resolver correctamente en el alias de bash

Estoy tratando de configurar una manera para mí de tipo 'newjournal', y una nueva entrada de diario con una cadena específica de year-month-date-12hourclocktime.txt se crea en un 'año' subdirectorio en mi 'revistas' de la carpeta de "documentos", dentro de la carpeta de inicio.

Lo tengo configurado como un alias de la siguiente manera:

alias newjournal='nano /home/username/documents/journals/'$(date +%Y)'/'$(date +%F-%k%M).txt''

Así que el año subcarpeta se resuelve correctamente, y aparentemente lo hace la primera mitad de la fecha de comandos. Trató de anexar el alias con sudo, no ayuda.

Tema: Por alguna razón, cuando hago este comando el valor de tiempo (%k) se resuelve en un par de minutos...o tal vez la última vez que nano se ejecutó este nombre de archivo, tal vez se llama un viejo buffer?
Cuando yo cierre de sesión hace que el archivo correcto, entonces puedo guardar, espere unos minutos e inténtelo de nuevo, y se edita el archivo antiguo en lugar de hacer uno nuevo. Incluso si puedo eliminar el archivo antiguo, se crea un archivo nuevo con el antiguo nombre de archivo (hora incorrecta).

Aquí está una captura de pantalla de lo que estoy tratando de explicar. Aquí puedo crear un newjournal, guardar en nano dentro de un segundo o dos de la ejecución del comando imprimir la fecha/hora, la lista de los archivos que se crearon. Nota el nombre de archivo incorrecto de tiempo (1249, en lugar de hacerlo a las 13:11):

Can't embed pictures yet, so here's a link.

De todos modos, podría ser algo simple, pero lo he intentado diferentes métodos en el alias, tales como poner comillas dobles alrededor de toda la cosa y escapar correctamente, solo citando, escape y espaciado, etc.

Gracias por la lectura/ayuda. Ubuntu 16.04 servidor.

5voto

Burnaby Puntos 57

El date comandos están siendo evaluados en el momento de la declaración de alias. Te voy a mostrar lo que quiero decir con un ejemplo de alias t:

$ alias t="echo \"$(date +%k%M)\""
$ alias t
alias t='echo "1357"'

Usted puede solucionar este problema mediante el uso de comillas simples alrededor de la definición de alias:

$ alias t='echo "$(date +%k%M)"'
$ alias t
alias t='echo "$(date +%k%M)"'

Para más información, véase la Diferencia entre las comillas dobles y simples en Bash

O si el comando no necesita ser un alias de shell, el uso de una función en su lugar:

$ function t { echo "$(date +%k%M)"; }
$ declare -f t
t () 
{ 
    echo "$(date +%k%M)"
}

La actualización, por reciente edición

$ alias t='echo '$(date +%k%M)''
$ alias t
alias t='echo 1400'

Pensar que la definición de alias como tres cadenas:

  1. Una cadena entre comillas dobles: 'echo '
  2. Uno no cotizadas en bolsa de la cadena: $(date +%k%M)
  3. Uno de comillas simples cadena nula: ''

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: