Impossible de définir un alias global dans zsh

0

Je veux définir un alias global qui tape une ligne.

alias -g TLOGS3="\`find /var/log/trafficserver/ -name access.log\* -printf \"%T@ %Tc %p\n\" | sort -n | tail -n 3 | cut -d \" \" -f 9 | tr \"\n\" \" \"\`"

Je veux taper ceci: -

`find /var/log/trafficserver/ -name access.log\* -printf "%T@ %Tc %p\n" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "\n" " "`

Mais, pour une raison quelconque, lorsque je tape (TLOGS3 et barre d'espace) dans un terminal (shell zsh), je reçois ceci: -

 $?=0 /home/arastogi [10:37AM] % TLOGS3find: `/var/log/trafficserver/': No such file or directory
`find /var/log/trafficserver/ -name access.log\* -printf "%T@ %Tc %p\n" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "\n" " "`

Quelqu'un peut-il m'aider concernant ce qui se passe?

Abhijeet Rastogi
la source

Réponses:

0

D'après le message d'erreur, il semblerait que le répertoire /var/log/trafficserver/n'existe pas ou du moins findne puisse pas y accéder.

Et je suppose que le message d'erreur apparaît après la saisie Spacecar il Spaceest lié à un widget, qui tente automatiquement de développer des alias. Si vos alias sont généralement remplacés par leur commande complète, c'est certainement le cas. Sinon, vous pouvez vérifier cela avec

bindkey " "

S'il n'y a pas de widget lié à Spacecela devrait montrer

" " self-insert

Cela pourrait aussi montrer

" " magic-space

Il s'agit d'un widget interne qui développe les références d'historique (comme !!) avant d'insérer également un espace. Mais cela n'affecte pas les alias.

S'il montre autre chose, c'est probablement le widget qui développe l'alias. Bien entendu, le problème sous-jacent est toujours que le répertoire n'existe pas ou est inaccessible.


En dehors de cela, le pseudonyme semble être correct et fonctionne pour moi, bien que je sois obligé de le remplacer -f 9par -f 8, car find ne me renvoie que huit champs, probablement en raison de paramètres de paramètres régionaux différents. Mais je suggérerais d'utiliser zshles qualificatifs glob pour obtenir le même résultat d'une manière moins compliquée:

alias -g TLOGS3='/var/log/trafficserver/**/access.log*(Om[-3, -1])'

Cela se développe en une liste de fichiers /var/log/trafficserverou de l’un de ses sous-répertoires ( **), correspondant au nom access.log*. Cette liste est ordonnée par ordre Ode modification décroissant ( ) en fonction de l'heure de modification ( m; la dernière modification en premier) et limitée au dernier dernier élément ( [-3,-1]).

S'il n'y a pas de sous-répertoires et que l'ordre des fichiers peut être inversé, il peut être abrégé.

alias -g TLOGS3='/var/log/trafficserver/access.log*(om[1,3])'

o ordres ascendants, donc les trois premiers éléments sont les trois premiers.

Adaephon
la source