2014-04-21 118 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?我会把它作为功课!