Избавление от «команда не найдена...»

Избавление от «команда не найдена...»

Когда я неправильно ввожу команду в терминале, я получаю эту ошибку:

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".

Связанный контент