我正在阅读这里标记的答案:内置命令和非内置命令有什么区别?
他在这里说:
内置命令只是 shell 自行执行的命令,而不是将其解释为加载和运行某些其他程序的请求。这有两个主要影响。首先,它通常更快,因为加载和运行程序需要时间。当然,命令运行时间越长,加载时间与整体运行时间相比就越不重要
这是否意味着当我们运行 shell 内置命令(如cd
或 )时echo
,shell(比如说 bash)对它的解释与cd
从使用 获得的路径(/usr/bin/cd)运行程序不同which cd
。
我原以为我们执行的所有命令都会运行相应的程序。看到这个答案让我很困惑。
如果 shell 不执行程序或文件,那么为什么which cd
仍然返回该程序的路径?这是否意味着当我们运行echo hi
command 时,它会搜索 env 变量中的路径PATH
以按名称执行程序echo
?
请解释一下这个....
答案1
shell 知道哪些实用程序是内置的。
shellbash
使用以下步骤查找命令(执行别名扩展后):
- 如果命令不包含斜杠
- 如果命令是 shell 函数,则调用该函数。
- 否则,如果它对应于内置命令,则使用该命令。
- 否则,shell 会搜索
$PATH
具有该名称的可执行文件,如果找到则执行它。
- 如果命令包含斜杠,则执行该指定文件。
这意味着 shell 搜索可执行文件的唯一时间$PATH
是当该命令不包含斜杠、不是 shell 函数且不是内置实用程序时。此外, shellbash
不会执行身体的如果给定的命令已经被散列,则搜索目录(参见help hash
)bash
。