Kann ich Bash dazu bringen, das Parsen und Überprüfen eines bestimmten Alias ​​zu beenden?

8

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 Straight-Up dnf updateinfo infowegen https://bugzilla.redhat.com/show_bug.cgi?id=1405191 nicht verwenden. )

Mein Alias ​​funktioniert, aber die Ausführung des Befehls dauert ungefähr 10 Sekunden. Da bash alle Aliase analysiert und überprüft, wenn das Profil bezogen wird, führt das Erstellen einer neuen Shell zu einem 10-Sekunden-Hang. Das ist nervig.

Gibt es eine Möglichkeit, Bash dazu zu bringen, Aliase nicht zu analysieren und zu validieren - oder nur diese?

iLikeDirt
quelle

Antworten:

9

Ich gehe davon aus, dass Sie wahrscheinlich einfache Anführungszeichen um die Alias-Definition verwenden sollten.

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

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

Wenn dies nicht dazu beiträgt, dass die Eingabeaufforderung wieder schneller geladen wird, definieren Sie eine Shell-Funktion anstelle eines Alias.

Bearbeiten: Vergessen Sie nicht, das Argument cut in doppelte Anführungszeichen wie quixotic zu tauschen.

hyph
quelle
Das hat es geschafft! Sie haben zuerst geantwortet, damit Sie die Gutschrift erhalten.
iLikeDirt
9

bashinterpretiert Ihre Zeichenfolge in Anführungszeichen und diese Interpretation führt den eingebetteten dnf check-updateBefehl aus. Diese Ausführung nimmt während der Aliasdefinition Zeit in Anspruch, nicht der Hauptbefehl, den dnf updateinfoSie als Aliasing ausführen . Probieren Sie ein erfundenes Beispiel aus sleepund beachten Sie, wie das aliasselbst 5 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 doppelte Anführungszeichen zu setzen.

quixotic
quelle