„Befehl nicht gefunden …“ loswerden

„Befehl nicht gefunden …“ loswerden

Wenn ich einen Befehl im Terminal falsch eingebe, erhalte ich diese Fehlermeldung:

bash: XX: command not found...

Danach muss ich warten oder die Tastatur unterbrechen, bevor ich die Eingabeaufforderung erneut verwenden kann. Manchmal bietet mir die Shell an, einen Befehl zu installieren, und das ist ziemlich nervig.

Gibt es eine Möglichkeit, diese Verzögerung zu beseitigen?

Danke für Antworten

Antwort1

Die Verzögerung wird durch einen benutzerdefiniertenBefehl-nicht-gefunden-Handlervon Ihrer Distribution hinzugefügt. Normalerweise wird es irgendwo in der systemweiten /etc/bash.bashrcDatei hinzugefügt.

Der Handler ist nur eine Shell-Funktion mit einem bestimmten Namen, Sie können ihn also auch deaktivieren oder überschreiben über~/.bashrc(z. B. wenn Sie die systemweite Konfiguration nicht ändern möchten).

Wenn der Handler der Distribution zu langsam ist, können Sie unset -fdie Funktion einfach entfernen () und zum Standardverhalten von Bash zurückkehren:

unset -f command_not_found_handle

Wenn Ihnen andererseits dieNachricht, dann können Sie Ihre eigene Version des Handlers definieren (wieder über ~/.bashrc):

command_not_found_handle() {
    echo "I don't know what '$1' is." >&2
    return 1
}

Antwort2

Eine andere Methode besteht darin, das Paket zu deinstallieren, das die ausführbare Datei bereitstellt pk-command-not-found– auf meinem Rocky Linux 9 command_not_found_handlesieht das folgendermaßen aus:

command_not_found_handle () 
    [[ ! -x '/usr/libexec/pk-command-not-found' ]] && runcnf=0;
        '/usr/libexec/pk-command-not-found' "$@";
            printf 'bash: %scommand not found\n' "${1:+$1: }" 1>&2;

Sie sehen also, dass es von dieser /usr/libexec/pk-command-not-foundausführbaren Datei abhängig ist.

Auf einem Red Hat-ähnlichen System können Sie Folgendes tun, um herauszufinden, um welches Paket es sich handelt, und es deinstallieren:

# rpm -qf /usr/libexec/pk-command-not-found
PackageKit-command-not-found-1.2.4-2.el9.x86_64
# dnf remove PackageKit-command-not-found

Dadurch wird eine systemweite Änderung bewirkt, alle Benutzer wären davon betroffen.

Oh, und 2>&1es ist nur eine Bash-Datei-Handle-Umleitung. Es bedeutet wörtlich „sende meinen stderr an dasselbe wie stdout“.

verwandte Informationen