Given a $PATH like:
/Users/myname/bin:
/usr/local/Cellar:
/usr/local/Cellar/ruby/1.9.3-p362/bin:
... and so forth
do I really need the ruby location or is /usr/local/Cellar sufficient to find ruby?
条目相互独立,只计算直接内容。试试看。
> mkdir ~/bin
> mkdir ~/bin/test
> cp /bin/echo ~/bin/test/echotest
> export PATH=$PATH:~/bin
> echotest Hello, world
-bash: echotest: command not found
> rm -rf ~/bin/test
基本上,当您键入一个普通的命令名称并且它不是函数或别名时,shell 会在逻辑上采用该名称并依次尝试 PATH 中的每个目录。在伪代码中:
name=command_to_execute
for path in ${names in PATH}
exec $path/$name "${arguments[@]}"
report "failed to find command $name"
如果exec
成功了,就没有什么可做的了。如果exec
失败,它会尝试下一个目录。
请注意,路径搜索永远不会应用于包含斜杠的名称。并且 shell 只搜索 PATH 中列出的目录(但空条目被解释为对.
当前目录的引用)。它不会自行查找子目录;您必须在 PATH 中列出子目录。