为什么使用$PATH ?它是什么?

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,搜索就会停止,程序就会运行。