我正在尝试为 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 链接,有什么想法吗?
答案1
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。
强调我的。