shell 内置命令实际上是否从其路径运行程序?

shell 内置命令实际上是否从其路径运行程序?

我正在阅读这里标记的答案:内置命令和非内置命令有什么区别?

他在这里说:

内置命令只是 shell 自行执行的命令,而不是将其解释为加载和运行某些其他程序的请求。这有两个主要影响。首先,它通常更快,因为加载和运行程序需要时间。当然,命令运行时间越长,加载时间与整体运行时间相比就越不重要

这是否意味着当我们运行 shell 内置命令(如cd或 )时echo,shell(比如说 bash)对它的解释与cd从使用 获得的路径(/usr/bin/cd)运行程序不同which cd

我原以为我们执行的所有命令都会运行相应的程序。看到这个答案让我很困惑。

如果 shell 不执行程序或文件,那么为什么which cd仍然返回该程序的路径?这是否意味着当我们运行echo hicommand 时,它会搜索 env 变量中的路径PATH以按名称执行程序echo

请解释一下这个....

答案1

shell 知道哪些实用程序是内置的。

shellbash使用以下步骤查找命令(执行别名扩展后):

  1. 如果命令不包含斜杠
    1. 如果命令是 shell 函数,则调用该函数。
    2. 否则,如果它对应于内置命令,则使用该命令。
    3. 否则,shell 会搜索$PATH具有该名称的可执行文件,如果找到则执行它。
  2. 如果命令包含斜杠,则执行该指定文件。

这意味着 shell 搜索可执行文件的唯一时间$PATH是当该命令不包含斜杠、不是 shell 函数且不是内置实用程序时。此外, shellbash不会执行身体的如果给定的命令已经被散列,则搜索目录(参见help hashbash

相关内容