Wie kann man Aliase in bash erweitern?

22835
asdfg

Gibt es eine Möglichkeit, Aliase in bash inline zu erweitern?

$bash>alias ll='ls -l ' $bash>ll<tab> $bash>ls -l  
75

4 Antworten auf die Frage

93
Dennis Williamson

Sie können Ctrl- Alt- drücken e, um die Readline-Funktion auszuführen, die shell-expand-lineAliasnamen, Verlauf und Worterweiterungen übernimmt . Beachten Sie, dass auf einigen Tastaturen Metanicht Alt. Sie könnten drücken müssen, Escdann Ctrl-e

Die Funktionen alias-expand-lineund history-and-alias-expand-linesind nicht standardmäßig gebunden, Sie können sie jedoch binden, indem Sie der ~/.inputrcDatei ähnliche Zeilen hinzufügen .

"\e\C-l": alias-expand-line 

Dies würde dazu führen, dass Ctrl- Alt- l(Kleinschreibung "ell") nur die Alias-Erweiterung ausführen .

Können wir die Alias-Erweiterung in abbilden? ohne Auswirkungen auf andere Bash-Vollendungen ?. asdfg vor 13 Jahren 0
@asdfg: Wenn Sie dies tun, werden andere Vervollständigungen abgebrochen. Es könnte * funktionieren (ungetestet) werden, die Karte wie oben gezeigt zu erstellen und diese zusätzliche Karte hinzuzufügen, um die vorhandene für Tab zu ersetzen: `" \ Ci ":" \ e \ Cl \ e \ e "`, wodurch ein Makro erstellt wird das führt sowohl "alias-expand-line" als auch "complete" aus. Es hängt von der Bindung aus meiner obigen Antwort ab, dass die Standardbindung für Esc-Esc beibehalten wird. Sie können weiterhin Esc-Esc ausführen, wenn Sie die Standardabwicklung durchführen möchten. Dennis Williamson vor 13 Jahren 2
ESC und dann CTRL + E funktioniert auf OS X, danke! Chris Wagner vor 11 Jahren 9
Tatsächlich arbeitet "ESC Ce" für Bash, "Cx a" dagegen für Zsh. Auch unter OS X getestet. Blaz vor 9 Jahren 3
Wenn Sie einfach nach Ctrl + etwas suchen, bei dem etwas die Taste "x" sein kann, können Sie dies in einigen Systemen folgendermaßen tun: `Control-x: history-and-alias-expand-line '. igordcard vor 7 Jahren 0
Wenn Sie Aliasnamen, die Anführungszeichen enthalten (z. B. ein Alias ​​foo = "dieser" Balken ""), manuell erweitern, werden die Anführungszeichen beim Erweitern mit Strg + Alt + E ausgeblendet. Aber seien Sie versichert, dass sie korrekt an den eigentlichen Befehl gesendet werden, wenn Sie * wirklich * den Alias ​​verwenden. Sie können dies überprüfen, indem Sie die Option "--something" in doppelte Anführungszeichen setzen. Der Befehl funktioniert, wenn er als Alias ​​verwendet wird. Ihr Programm schlägt jedoch mit einer Meldung wie "Ungültige Option - etwas" fehl, wenn Sie manuell auf die nicht zitierte Version erweitert werden. gw0 vor 7 Jahren 0
`Ctrl-Alt-l` hat meine X-Sitzung gesperrt ... Ich würde andere Kombinationen vorschlagen. Weijun Zhou vor 5 Jahren 0
@WeijunZhou: Das hängt von Ihrem Fenstermanager und Ihren benutzerdefinierten Einstellungen ab. Für Gnome ist der Sperrbildschirm beispielsweise Super + L. Dennis Williamson vor 5 Jahren 1
3
starscream_disco_party

Dies ist möglicherweise eine viel einfachere Methode, um das zu tun, was Sie versuchen ( bashVersion> = 4.2.29):

shopt -s direxpand shopt -s expand_aliases 

shopt‚s manSeite: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html

Das ist falsch. Die Shell-Optionen "direxpand" und "expand_aliases" helfen nicht, die Aliase wie in der Frage angegeben inline zu erweitern. Ich weiß nicht aus welchem ​​Hut "Direxpand" genommen wurde ...? Standardmäßig ist "expand_aliases" bereits festgelegt. Wenn Sie es nicht setzen, werden die Aliase grundsätzlich deaktiviert (sie werden nicht vor der Interpretation der Befehlszeile erweitert). Bei einem Alias ​​'alias ll =' ls -l 'würde die Shell beispielsweise' ll 'als Befehl / Funktion' ll 'interpretieren, was wahrscheinlich nicht existiert. FooF vor 7 Jahren 1
0
0fnt

Das funktioniert nicht. Aber ich vermute / hoffe, dass so etwas getan werden kann, um das zu tun, was Sie wollen. Sie müssten Ihr eigenes Abschlussskript verwenden. So machen Sie eins:

_ll() { COMPREPLY=(ls -l) #The next line does not work. I just hope there were a way to replace that word COMP_WORDS[COMP_CWORD-1]="ls -l" } complete -F _ll ll 

Geben Sie nun die vollständige Datei bash_completion ( http://caliban.org/bash ) ein und legen Sie das oben genannte Skript in eine Datei im Verzeichnis bash_completion.d, die das Skript enthält, das Sie über die URL erhalten. Lass es mich wissen, wenn es nicht funktioniert.

Vielen Dank.

0
Can

Für Leute, die zsh installiert haben und nach einer einfachen Lösung suchen, könnte globalias Ihr Freund sein

Erweitert alle Glob-Ausdrücke, Unterbefehle und Aliasnamen (einschließlich global).

# .zsrc: alias S="sudo systemctl"  $ S<space> # expands to: $ sudo systemctl 

Zur Installation fügen Sie einfach "globalias" zu Ihrer .zshrc-Plugin-Liste hinzu

plugins=(... globalias) 

Dann drücken Sie einfach SPACE, um die Erweiterung eines Befehls auszulösen, den Sie geschrieben haben.

Wenn Sie nur ein Leerzeichen einfügen möchten, ohne die Befehlszeile zu erweitern, drücken Sie CTRL+SPACE