摆脱“未找到命令...”

摆脱“未找到命令...”

当我在终端中输入错误命令时,出现此错误:

bash: XX: command not found...

之后,我必须等待或使用键盘中断才能再次使用提示。有时 shell 会要求我安装一些命令,这很烦人。

有什么方法可以消除这种延迟吗?

感谢回答

答案1

延误是由于海关命令未找到处理程序由您的发行版添加。它通常被添加到系统范围/etc/bash.bashrc文件的某个位置。

该处理程序只是一个具有特定名称的 shell 函数,因此您也可以通过以下方式禁用或覆盖它~/.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 相同的位置”。

相关内容