当我在终端中输入错误命令时,出现此错误:
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 相同的位置”。