假设我们使用命令“wget www.myurl.com”,按下回车键后,终端是否会在某处检查是否存在名为 wget 的已安装程序,然后检查参数,并在某处检查该程序应该如何运行?
它检查哪些领域以及如何验证论点?
答案1
终端实际上并没有做任何这些,而是程序正在运行在默认处理命令的终端猛击(如地狱)。
当你运行一个命令时,Bash 会做很多事情,但其中很多与本例无关,所以我将跳过它们(例如重定向, 最多扩展、关键字和内置命令)。
当你运行wget www.myurl.com
, Bash 时:
- 将其拆分成单词并将第一个单词视为命令名称,即
wget
- 检查命令名称是否是别名、函数和/或具有散列路径
- 假设不是
- 检查环境变量中的每个目录
PATH
以查找具有该名称的可执行文件- 我的情况
wget
是/usr/bin/wget
。运行type wget
看看吧。
- 我的情况
/usr/bin/wget
使用参数wget
(命令名称)和www.myurl.com
(您提供的命令行参数) 运行可执行文件- Bash 本身并不验证参数
- 等待命令完成并返回其退出状态
有关详细信息,请参阅Shell 操作在 Bash 手册中,以及那里的链接中。
答案2
假设您使用 bash 作为 shell,它将搜索通过 PATH 环境变量设置的所有目录。
请注意,别名和函数优先于脚本/二进制文件。您可以使用echo "$PATH"
列出目录(使用冒号作为分隔符)。