Beachten Sie, dass Strg-Alt-E in bash
nicht nur Aliase erweitert. Es erweitert auch Variablen, Befehlsersetzung (!), Prozessersetzung (!), Arithmetische Erweiterung und entfernt Anführungszeichen (es führt keine Dateinamengenerierung (Globbing) oder Tilde-Erweiterung durch).
Es gelingt nicht immer, Aliase zu erweitern. Daher ist es wichtig, zu erkennen, dass das Ergebnis möglicherweise die Bedeutung der Befehlszeile ändert, Nebenwirkungen hat und potenziell gefährlich ist.
Zum Beispiel in:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
Wenn ich M-C-E
hier drücke , gibt mir das:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
Das gibt mir eine völlig andere Kommandozeile (und stellen Sie sich vor, was passiert wäre, wenn ich rm -rf *
statt pwd
oben hätte) und erweitert den foo
Alias nicht.
Mit zsh
, zum Aufbau auf Gilles' Hinweis auf Aliase innerhalb von Funktionen erweitert, könnten Sie tun:
expand-aliases() {
unset 'functions[_expand-aliases]'
functions[_expand-aliases]=$BUFFER
(($+functions[_expand-aliases])) &&
BUFFER=${functions[_expand-aliases]#$'\t'} &&
CURSOR=$#BUFFER
}
zle -N expand-aliases
bindkey '\e^E' expand-aliases
Dadurch werden die Aliase nur dann erweitert, wenn die aktuelle Befehlszeile syntaktisch gültig ist (und somit auch als Syntaxprüfprogramm fungiert).
Im Gegensatz zu bash
MCE werden auch die Aliase vollständig aufgelöst. Zum Beispiel, wenn Sie:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
Wird erweitert auf:
$ ls --color -l
Beachten Sie, dass es auch die Syntax kanonisiert, so dass Dinge wie:
$ for i (*) cmd $i; foo
wird geändert in:
$ for i in *
do
cmd $i
done
foo
C-x a
Erweitert den Alias unter dem Cursor (vorausgesetzt, Sie verwenden das Vervollständigungssystem).