2013-07-16 59 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中列出子目錄。