Bash

找不到命令句柄不適用於 url

  • November 17, 2013

我正在嘗試為 URL 連結設置 command_not_found_handle,

%> command_not_found_handle() { echo "OK"; }
%> aaaaa
OK
%> http://www.google.com
bash: http://www.google.com: No such file or directory

所以它適用於正常輸入,但不適用於 URL 連結,有什麼想法嗎?

URL 被視為包含子目錄。例如看到這個:

$ command_not_found_handle() { echo "OK"; }
$ aaa
OK
$ aaa/bbb
bash: aaa/bbb: No such file or directory
$ 

也就是說,它在您執行命令時起作用,但是當您執行帶有斜杠的命令時,它可能會嘗試bbb在文件夾中執行aaa。URL 也是如此 - 它認為它www.google.com在目錄中執行命令http:

從 bash 手冊頁:

如果名稱既不是 shell 函式也不是內置函式,並且不包含斜杠, bash 在 PATH 的每個元素中搜尋包含該名稱的執行檔的目錄。Bash 使用雜湊表來記住執行檔的完整路徑名(請參閱下面的 SHELL BUILTIN COMMANDS 下的雜湊)。僅當在雜湊表中找不到該命令時,才會對 PATH 中的目錄進行完整搜尋。如果搜尋不成功,shell 會搜尋一個已定義的名為 command_not_found_handle 的 shell 函式。如果該函式存在,則使用原始命令和原始命令的參數作為其參數呼叫它,並且該函式的退出狀態變為 shell 的退出狀態。如果未定義該函式,shell 將列印一條錯誤消息並返回退出狀態 127。

強調我的。

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