2013-07-16 46 views
1

给定一个$ PATH,如:

/Users/myname/bin: 
/usr/local/Cellar: 
/usr/local/Cellar/ruby/1.9.3-p362/bin: 
... and so forth 

我真的需要红宝石位置,或者是/ usr /本地/酒窖足以找到红宝石?

+2

是的,你的shell不会在这些文件夹中递归搜索二进制文件 – Blender

回答

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 
0
基本上

,当键入一个普通的命令的名称和它不是一个功能或别名,则壳逻辑取的名称和尝试每个目录在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中列出子目录。