Когда я неправильно ввожу команду в терминале, я получаю эту ошибку:
bash: XX: command not found...
После этого мне приходится ждать или использовать прерывание клавиатуры, прежде чем я снова смогу использовать приглашение. Иногда оболочка предлагает мне установить какую-то команду, и это довольно раздражает.
Есть ли способ избавиться от этой задержки?
Спасибо за ответы
решение1
Задержка вызвана обычаемобработчик команды-не-найденадобавлено вашим дистрибутивом. Обычно добавляется где-то в системном /etc/bash.bashrc
файле.
Обработчик — это просто функция оболочки с определенным именем, поэтому вы также можете отключить или переопределить ее с помощью~/.bashrc(например, если вы не хотите менять общесистемную конфигурацию).
Если обработчик дистрибутива работает слишком медленно, то вы можете просто удалить ( unset -f
) функцию и вернуться к стандартному поведению bash:
unset -f command_not_found_handle
С другой стороны, если вам не нравитсясообщение, то вы можете определить свою собственную версию обработчика (снова через ~/.bashrc):
command_not_found_handle() {
echo "I don't know what '$1' is." >&2
return 1
}
решение2
Другой способ — удалить пакет, предоставляющий исполняемый файл pk-command-not-found
. На моем Rocky Linux 9 это command_not_found_handle
выглядит так:
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;
Итак, вы видите, что это зависит от этого /usr/libexec/pk-command-not-found
исполняемого файла.
В системе типа Red Hat вы можете сделать следующее, чтобы узнать, что это за пакет, и удалить его:
# 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
Это изменение коснется всей системы и повлияет на всех пользователей.
О, и 2>&1
это просто перенаправление дескриптора файла bash. Это буквально означает "отправить мой stderr туда же, куда и stdout".