Linux 命令\u未找到\u处理程序不带斜杠
我在登录bashshell(Ubuntu 16中的4.3版)时遇到问题。我有一个功能:Linux 命令\u未找到\u处理程序不带斜杠,linux,bash,Linux,Bash,我在登录bashshell(Ubuntu 16中的4.3版)时遇到问题。我有一个功能: command_not_found_handler() { if [[ "$1" =~ any$ ]]; then echo "$1" fi } 当此命令以any结尾时,此函数应写回终端中写入的任何命令的内容 这很有效,除了在我使用/编写某些内容时,例如which/any。在这种情况下,我收到一个类似于以下内容的错误: bash: no such file or directory: wha
command_not_found_handler() {
if [[ "$1" =~ any$ ]]; then
echo "$1"
fi
}
当此命令以any
结尾时,此函数应写回终端中写入的任何命令的内容
这很有效,除了在我使用/
编写某些内容时,例如which/any
。在这种情况下,我收到一个类似于以下内容的错误:
bash: no such file or directory: whatever/any
在函数中转义此/
的任何尝试均无效(例如如果[[“$1”=~/Any$]];那么或者如果[[“$1”=~\/Any$]];那么)
如何使其与/
符号一起工作?命令\u未找到\u句柄
(无尾随r
)仅在对给定命令的路径进行搜索后调用
当用户向命令传递显式路径时,不会发生此类搜索,这就是解释任何包含/
的内容的方式
引述如下,并加上重点:
如果名称既不是shell函数也不是内置函数,并且不包含斜杠,Bash将在$PATH
的每个元素中搜索包含该名称的可执行文件的目录。Bash使用哈希表来记住可执行文件的完整路径名,以避免多次PATH
搜索(请参阅中的哈希描述)。只有在哈希表中找不到命令时,才会对$PATH
中的目录执行完全搜索。如果搜索不成功,shell将搜索名为命令\u未找到\u句柄的已定义shell函数
。如果该函数存在,将使用原始命令和原始命令的参数作为其参数调用它,并且函数的退出状态将成为shell的退出状态。如果未定义该函数,shell将打印一条错误消息并返回127的退出状态
文档的整个段落仅与开头列出的一组条件相关:命令不能是shell函数,不能是内置的,也不能包含斜杠。command\u not\u found\u handle
(无尾随r
)仅在对给定命令的路径进行搜索后调用
当用户向命令传递显式路径时,不会发生此类搜索,这就是解释任何包含/
的内容的方式
引述如下,并加上重点:
如果名称既不是shell函数也不是内置函数,并且不包含斜杠,Bash将在$PATH
的每个元素中搜索包含该名称的可执行文件的目录。Bash使用哈希表来记住可执行文件的完整路径名,以避免多次PATH
搜索(请参阅中的哈希描述)。只有在哈希表中找不到命令时,才会对$PATH
中的目录执行完全搜索。如果搜索不成功,shell将搜索名为命令\u未找到\u句柄的已定义shell函数
。如果该函数存在,将使用原始命令和原始命令的参数作为其参数调用它,并且函数的退出状态将成为shell的退出状态。如果未定义该函数,shell将打印一条错误消息并返回127的退出状态
文档的整个段落仅在开头列出的一组条件中相关:命令不能是shell函数,不能是内置的,也不能包含斜杠。这不是一般斜杠或[[]
的限制,这是命令_not _found _处理程序函数工作方式的一个限制。在if条件之前,您不能删除$1中的斜杠吗?@dganesh2002,如果有/,则根本不调用该函数,因此这是一个相当没有意义的例子。这是一个孤立的例子吗?我的意思是:在代码上乱跳,在下面调用函数,还是在更大的脚本中发生?我无法复制它。@alagner,命令\u not\u found\u handle
是交互式shell功能,因此不需要shebang,也不需要显式调用。这不是一般的斜杠限制,也不是[[]]
限制,这是命令_not _found _处理程序函数工作方式的一个限制。在if条件之前,您不能删除$1中的斜杠吗?@dganesh2002,如果有/,则根本不调用该函数,因此这是一个相当没有意义的例子。这是一个孤立的例子吗?我的意思是:在代码上乱跳,在下面调用函数,还是在更大的脚本中发生?我无法复制它。@alagner,命令\u未找到\u句柄
是交互式shell功能,因此不需要shebang,也不需要显式调用。