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.bashrc
Datei 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 -f
die 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_handle
sieht 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-found
ausfü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>&1
es ist nur eine Bash-Datei-Handle-Umleitung. Es bedeutet wörtlich „sende meinen stderr an dasselbe wie stdout“.