2014-04-21 115 views
1

我試圖以儘可能簡單的方式將一組子目錄添加到PATH中。將文件目錄添加到PATH

目前的結構是:

main_project/ 
    subproject/bin/ 
    subproject2/bin/ 
    subproject with spaces/bin/ 
目前我使用的是簡單的bash福在我的.bash_profile

PATH="$PATH:$(echo /projects/main_project/*/bin | tr ' ' ':')"

問題是與空間的路徑出來的:

subproject:with:spaces/bin/在我的$ PATH

回答

3

您應該使用printf代替:

PATH="$PATH$(printf ":%s" /projects/main_project/*/bin)" 
1

一個循環會更清楚:

for subproj in /projects/main_project/*/bin; do 
    PATH+=":$subproj" 
done 
0

另一種可能性(濫用IFS - 但它在這裏對這種目的的呢!):

scratch=(/projects/main_project/*/bin) 
IFS=: read -r PATH <<< "$PATH:${scratch[*]}" 

下面的東西可能是ove rkill和你的目的沒用!

如果你想要的東西更強勁,預期即使PATH是設置或者爲空的作品:

scratch=(/projects/main_project/*/bin) 
IFS=: read -r PATH <<< "${PATH:+$PATH:}${scratch[*]}" 

最後你可能(!正確地)認爲這是不是安全使用水珠,沒有任何安全(即,沒有外殼選項nullglobfailglob)組:

old_nullglob=$(shopt -p nullglob) 
shopt -s nullglob 
scratch=(/projects/main_project/*/bin) 
((${#scratch})) && IFS=: read -r PATH <<< "${PATH:+$PATH:}${scratch[*]}" 
$old_nullglob 

又一想,如果這些都是已經在你的PATH?我會把它作爲功課!