In zsh - zsh kann kein globaler Alias ​​definiert werden

Ich möchte einen globalen Alias ​​definieren, der einen Einzeiler eingibt.

alias -g TLOGS3="`find /var/log/trafficserver/ -name access.log* -printf "%[email protected] %Tc %pn" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "n" " "`"

Ich möchte Folgendes eingeben: -

`find /var/log/trafficserver/ -name access.log* -printf "%[email protected] %Tc %pn" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "n" " "`

Aber aus irgendeinem Grund, wenn ich (TLOGS3 und Leertaste) im Terminal (zsh-Shell) eingebe, bekomme ich Folgendes:

âžś $?=0 /home/arastogi [10:37AM] % TLOGS3find: `/var/log/trafficserver/": No such file or directory
`find /var/log/trafficserver/ -name access.log* -printf "%[email protected] %Tc %pn" | sort -n | tail -n 3 | cut -d " " -f 9 | tr "n" " "`

Kann mir jemand helfen, was passiert?

Antworten:

0 fĂĽr Antwort â„– 1

Aus der Fehlermeldung geht hervor, dass das Verzeichnis /var/log/trafficserver/ existiert nicht oder zumindest find kann nicht darauf zugreifen.

Und ich würde vermuten, dass die Fehlermeldung nach dem Tippen erscheint Platz da Platz ist an ein Widget gebunden, das automatisch versucht, Aliase zu erweitern. Wenn Ihr Alias ​​normalerweise durch den vollständigen Befehl ersetzt wird, ist dies definitiv der Fall. Ansonsten können Sie dies mit überprüfen

bindkey " "

Wenn an kein Widget gebunden ist Platz das sollte sich zeigen

" " self-insert

Es könnte sich auch zeigen

" " magic-space

Dies ist ein internes Widget, das Verlaufsverweise erweitert (z. B. !!), bevor auch ein Leerzeichen eingefĂĽgt wird. Aliase sind davon jedoch nicht betroffen.

Wenn etwas anderes angezeigt wird, ist dies höchstwahrscheinlich das Widget, das den Alias ​​erweitert. Natürlich ist das zugrunde liegende Problem immer noch, dass das Verzeichnis nicht existiert oder nicht zugreifbar ist.


Abgesehen davon scheint der Alias ​​in Ordnung zu sein und funktioniert für mich, obwohl ich mich ändern musste -f 9 in -f 8, da find für mich nur acht Felder zurückgibt, wahrscheinlich aufgrund unterschiedlicher Gebietsschemaeinstellungen. Aber ich würde vorschlagen, mit zsh"s Glob-Qualifikanten, um dasselbe auf eine weniger komplizierte Weise zu erreichen:

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

Dies wird zu einer Liste von Dateien in erweitert /var/log/trafficserver oder eines seiner Unterverzeichnisse (**), passend zum Namen access.log*. Diese Liste ist absteigend sortiert (O) nach Änderungszeit (m; letzte Änderung zuerst) und beschränkt auf das drittletzte Element ([-3,-1]).

Wenn es keine Unterverzeichnisse gibt und die Dateireihenfolge umgekehrt werden kann, kann dies auf verkĂĽrzt werden

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

o Reihenfolge aufsteigend, so dass das erste bis dritte Element die drei neuesten sind.


Lies jetzt