当运行不带任何参数或选项的无效命令时,根据我的经验,我们只会收到两种消息,如下所示:
~$ Date
No command 'Date' found, did you mean:
Command 'yate' from package 'yate' (universe)
Command 'date' from package 'coreutils' (main)
Command 'late' from package 'late' (universe)
Command 'kate' from package 'kate' (universe)
Date: command not found
~$ fjldjflsk
fjldjflsk: command not found
~$
我有兴趣了解更多有关其工作原理的信息。具体来说,我什么时候才能知道在运行命令之前我将收到这两种消息中的哪一种?是否有某种环境变量或任何其他设备可以让我轻松改变这种行为?我只想收到第二种消息。
答案1
shell会调用一个在未找到命令时bash
调用的函数。command_not_found_handle
该函数可以通过如下方式查看,declare -f command_not_found_handle
并且可能看起来像这样(在 Ubuntu 系统上找到):
command_not_found_handle ()
{
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1";
return $?;
else
if [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1";
return $?;
else
printf "%s: command not found\n" "$1" 1>&2;
return 127;
fi;
fi
}
正如您所看到的,它使用另一个名为command-not-found
.它还使用不带引号的变量扩展和不必要的return
语句,但目前这不是重点。
要删除此函数所做的预测,您可以使用以下命令完全删除此函数
unset -f command_not_found_handle
(这可能是最好的选择)或者,您可以卸载该函数使用的可执行文件,假设系统使用apt
:
sudo apt purge command-not-found
(该command-not-found
命令至少是 Ubuntu 等同名软件包的一部分)。
有关该command_not_found_handle
功能的更多信息,请参阅bash
手册。