Shell
命令未找到消息
在沒有任何參數或選項的情況下執行無效命令時,根據我的經驗,我們只會得到兩種消息,如下所示:
~$ 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 ~$
我有興趣了解更多關於它是如何工作的。具體來說,我什麼時候可以知道在執行命令之前我會收到這兩種消息中的哪一種?是否有某種環境變數或任何其他設備可以讓我輕鬆改變這種行為?我只想收到第二種消息。
每當找不到命令時,
bash
shell 就會呼叫一個函式。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
手冊。