Kann ich machen, dass bash das Parsen und Validieren eines bestimmten Alias ​​aufhört?

872
iLikeDirt

Ich verwende Fedora 25 und habe meinem Bash-Profil den folgenden Alias ​​hinzugefügt:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less" 

(Ich kann dnf updateinfo infoaufgrund von https://bugzilla.redhat.com/show_bug.cgi?id=1405191 nicht direkt verwenden. )

Mein Alias ​​funktioniert, aber es dauert ungefähr 10 Sekunden, bis der Befehl ausgeführt wird. Da bash alle Aliasnamen analysiert und validiert, wenn das Profil erstellt wird, führt das Erstellen einer neuen Shell zu einem 10-Sekunden-Stillstand. Das ist nervig.

Gibt es eine Möglichkeit, dass bash nicht versucht wird, Aliase zu analysieren und zu validieren - oder nur diesen?

8

2 Antworten auf die Frage

9
hyph

Meine beste Vermutung ist, dass Sie für die Alias-Definition wahrscheinlich einfache Anführungszeichen verwenden sollten .

Ich weiß, dass bei der Verwendung von doppelten Anführungszeichen Shell-Variablen in der Aliasdefinitionsphase durch ihren Inhalt ersetzt werden (wie Sie dies beim Parsen und Validieren gesagt haben) und Backticks oder Shell-Ersetzungen wie $ (Befehl).

Eine bessere Erklärung finden Sie in dieser Unix SE-Frage !

Wenn dies das erneute Laden der Eingabeaufforderung nicht beschleunigt, definieren Sie eine Shell-Funktion anstelle eines Alias.

edit: Vergiss nicht, das cut-Argument in doppelte Anführungszeichen wie quixotic zu tauschen.

Das hat es geschafft! Sie haben zuerst geantwortet, also bekommen Sie den Kredit. iLikeDirt vor 7 Jahren 0
9
quixotic

bashinterpretiert Ihre Zeichenfolge in Anführungszeichen und diese Interpretation führt den eingebetteten dnf check-updateBefehl aus. Diese Ausführung beansprucht die Zeit während der Aliasdefinition und nicht den Hauptbefehl, den dnf updateinfoSie als Aliasing verwenden. Versuchen Sie es anhand eines erfundenen Beispiels, sleepund notieren Sie, wie es alias5 Sekunden dauert:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'" 

Verwenden Sie einfache Anführungszeichen, um die Interpretation zu vermeiden:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less' 

Vergessen Sie nicht, das cutArgument in Anführungszeichen zu tauschen .