Shell

命令未找到消息

  • February 17, 2019

在沒有任何參數或選項的情況下執行無效命令時,根據我的經驗,我們只會得到兩種消息,如下所示:

~$ 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
~$

我有興趣了解更多關於它是如何工作的。具體來說,我什麼時候可以知道在執行命令之前我會收到這兩種消息中的哪一種?是否有某種環境變數或任何其他設備可以讓我輕鬆改變這種行為?我只想收到第二種消息。

每當找不到命令時,bashshell 就會呼叫一個函式。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.

要刪除此函式所做的預測,您可以使用完全刪除此函式

unset -f command_not_found_handle

(這可能是最好的選擇)或者,您可以解除安裝該函式使用的執行檔,假設系統使用apt

sudo apt purge command-not-found

(該command-not-found命令至少在例如 Ubuntu 上是同名軟體包的一部分)。

有關該command_not_found_handle功能的更多資訊,請參閱bash手冊。

引用自:https://unix.stackexchange.com/questions/501245