J'essaie de trouver un moyen de taper simplement newjournal
et une nouvelle entrée de journal nommée year-month-date-time.txt
est créée dans un sous-répertoire year
dans ~/documents/journals
.
Je l'ai configuré comme un alias en utilisant les éléments suivants:
alias newjournal='nano /home/username/documents/journals/'$(date +%Y)'/'$(date +%F-%k%M).txt''
Ainsi, le sous-dossier year se résout correctement, tout comme la première moitié de la commande de date. J'ai essayé d'ajouter le pseudonyme avec Sudo
, mais cela n'a pas aidé.
Problème: pour une raison quelconque, lorsque je fais cette commande, la valeur de l'heure (%k
) est résolue il y a quelques minutes ... ou peut-être la dernière fois que nano a exécuté ce nom de fichier, peut-être s'appelle-t-il un ancien tampon?
Lorsque je me déconnecte, le fichier correct est créé, puis je le sauvegarde, attend quelques minutes et réessayez. Il édite l'ancien fichier au lieu d'en créer un nouveau. Même si je supprime l'ancien fichier, il crée un nouveau fichier avec l'ancien nom de fichier (heure incorrecte).
Voici une capture d'écran de ce que j'essaie d'expliquer. Ici, je crée un nouveau journal, sauvegardé dans nano en une seconde ou deux après l’exécution de la commande, affiche la date/heure correcte et répertorie le fichier créé. Notez le temps de nom de fichier incorrect (1249, comme prévu à 13h11):
Quoi qu'il en soit, cela pourrait être quelque chose de simple, mais j'ai essayé différentes méthodes dans l'alias, comme mettre des guillemets doubles et les échapper correctement, guillemets simples, échappements et espacements, etc.
Merci pour la lecture/aide. Serveur Ubuntu 16.04.
Les commandes date
sont évaluées lorsque vous déclarez l'alias .
Voici un exemple d'alias t
:
$ alias t="echo \"$(date +%k%M)\""
$ alias t
alias t='echo "1357"'
Vous pouvez résoudre ce problème en utilisant des guillemets simples:
$ alias t='echo "$(date +%k%M)"'
$ alias t
alias t='echo "$(date +%k%M)"'
Pour plus d'informations, voir Différence entre guillemets simples et doubles dans Bash
Ou si la commande n'a pas besoin d'être un alias, utilisez plutôt une fonction:
$ function t { echo "$(date +%k%M)"; }
$ declare -f t
t ()
{
echo "$(date +%k%M)"
}
Ou un script:
#!/bin/sh
echo "$(date +%k%M)"
$ alias t='echo '$(date +%k%M)''
$ alias t
alias t='echo 1400'
Pensez à cette définition de pseudonyme comme à trois chaînes:
'echo '
$(date +%k%M)
''