man bash将其描述为:
路径
命令的搜索路径。它是一个以冒号分隔的目录列表,shell在其中查找命令(参见下面的命令执行)。PATH值中的零长度(null)目录名表示当前目录.空目录名可以显示为两个相邻冒号,也可以显示为初始冒号或尾冒号。默认路径依赖于系统,并由安装bash的管理员设置.一个常见的值是/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin'。
当您运行像python这样的命令时,操作系统试图在存储在PATH中的目录列表中找到python程序。
假设您的PATH是/usr/local/bin:/foo:/bar:/baz:/usr/bin。当您尝试运行python comamnd时,操作系统将按照顺序在这些目录中查找名为python的可执行文件。在Linux上,您可以通过strace命令看到它这样做:
代码语言:javascript运行复制$ PATH=/usr/local/bin:/foo:/bar:/baz:/usr/bin strace -f /bin/bash -c 'python --version' 2>&1 | grep 'stat.*python'
stat("/usr/local/bin/python", 0x7fff98b63d00) = -1 ENOENT (No such file or directory)
stat("/foo/python", 0x7fff98b63d00) = -1 ENOENT (No such file or directory)
stat("/bar/python", 0x7fff98b63d00) = -1 ENOENT (No such file or directory)
stat("/baz/python", 0x7fff98b63d00) = -1 ENOENT (No such file or directory)
stat("/usr/bin/python", {st_mode=S_IFREG|0755, st_size=4864, ...}) = 0一旦在python中找到/usr/bin/python,搜索就会停止,程序就会运行。