3

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?

4

2 回答 2

4

条目相互独立,只计算直接内容。试试看。

> 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
于 2013-07-16T17:57:34.327 回答
1

基本上,当您键入一个普通的命令名称并且它不是函数或别名时,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 中列出子目录。

于 2013-07-16T18:04:51.523 回答