2013-04-26 2 views
1

j'ai un alias dans bash ressembler à ceci:Bash: la commande en cache génère un alias?

alias bblog="ssh -t bbdev tail -f /var/logs/bb/stdout-stderr-`date \"+%Y%m%d\"`.log" 

Il fonctionne très bien, sauf quand l'horloge tourne le lendemain, (passer minuit), je dois relancer le bBlog à la queue le prochain journal. Mais date \"+%Y%m%d\" renvoie toujours la date précédente. Il semble mis en cache la valeur. Donc, il suit toujours le journal précédent.

Des idées? Merci

+0

Je pense que vous devrez passer la date en paramètre avec votre alias. – Aquillo

+0

Les alias ne prennent pas de paramètres, ce qui est une raison pour utiliser une fonction shell à la place. – chepner

Répondre

7

mettre l'alias entre guillemets simples, cela supprime l'évaluation en retour arrière jusqu'à l'utilisation.

alias bblog='ssh -t bbdev tail -f /var/logs/bb/stdout-stderr-`date "+%Y%m%d"`.log' 

Je vous recommande d'utiliser $() au lieu de guillemets obliques comme il est plus facile de comprendre la logique.

un simple exemple de son utilisation est:

alias foo='echo $(date)' 

argle:~$ foo 
Fri Apr 26 10:29:14 IST 2013 
argle:~$ foo 
Fri Apr 26 10:29:15 IST 2013 
1

Remplacez votre alias avec une fonction shell:

bblog() { 
    ssh -t bbdev tail -f /var/logs/bb/stdout-stderr-$(date "+%Y%m%d").log 
} 

Cette reporte l'appel à date jusqu'à ce que lorsque vous exécutez en fait la fonction, ce qui rend la citant plus simple. Il est également plus flexible, ce qui vous permet de transmettre des arguments en cas de besoin. Par exemple, vous pouvez spécifier un autre hôte pour vous connecter:

bblog() { 
    host=${1:-bbdev} 
    ssh -t "$host" tail -f /var/logs/bb/stdout-stderr-$(date "+%Y%m%d").log 
} 

$ bblog   # Check bbdev 
$ bblog bother # Check a different host