当我们在终端中输入命令时内部发生了什么?

当我们在终端中输入命令时内部发生了什么?

假设我们使用命令“wget www.myurl.com”,按下回车键后,终端是否会在某处检查是否存在名为 wget 的已安装程序,然后检查参数,并在某处检查该程序应该如何运行?

它检查哪些领域以及如何验证论点?

答案1

终端实际上​​并没有做任何这些,而是程序正在运行默认处理命令的终端猛击(如地狱)。

当你运行一个命令时,Bash 会做很多事情,但其中很多与本例无关,所以我将跳过它们(例如重定向, 最多扩展、关键字和内置命令)。

当你运行wget www.myurl.com, Bash 时:

  1. 将其拆分成单词并将第一个单词视为命令名称,即wget
  2. 检查命令名称是否是别名、函数和/或具有散列路径
    • 假设不是
  3. 检查环境变量中的每个目录PATH以查找具有该名称的可执行文件
    • 我的情况wget/usr/bin/wget。运行type wget看看吧。
  4. /usr/bin/wget使用参数wget(命令名称)和www.myurl.com(您提供的命令行参数) 运行可执行文件
    • Bash 本身并不验证参数
  5. 等待命令完成并返回其退出状态

有关详细信息,请参阅Shell 操作在 Bash 手册中,以及那里的链接中。

答案2

假设您使用 bash 作为 shell,它将搜索通过 PATH 环境变量设置的所有目录。

请注意,别名和函数优先于脚本/二进制文件。您可以使用echo "$PATH"列出目录(使用冒号作为分隔符)。

相关内容