shell 找不到那条裸命令时
“找不到命令”说明一次查找失败,却不代表 Shell 每次都遍历了 PATH 的全部目录。在普通 Bash 中,不带斜杠的命令词可能对应函数、内建命令、缓存的可执行路径,或者刚刚搜索到的程序。更早的输入读取阶段,别名还可能已经改写命令。面对报错,应先检查真正发生故障的那个 Shell,而不是立即重装一个其实已经存在的工具。 在真正出错的 Shell 中检查解析结果。函数、内建命令、路径缓存和 PATH 顺序可能选择不同命令;含斜杠时直接选择路径。选中命令不等于执行成功。缓存顺序来自原文示例,不是本轮新做的运行测试。 先确认是哪一层查找给出结果 展开之后,Bash 先检查函数,再检查内建命令,之后才查找外部程序。type name 描述当前解析结果,type -a name 可以看到其他定义或候选项。command -v name 适合检查该 Shell 中是否存在某个命令,但结果不保证是文件路径,也可能说明它是函数或内建命令。因此不能无条件把输出交给复制文件或读取文件的工具。 ...