我正在尝试以尽可能简单的方式将一组子目录添加到我的PATH中。
目前的结构是:
main_project/
subproject/bin/
subproject2/bin/
subproject with spaces/bin/
我目前在.bash_profile中使用简单的bash-fu:
PATH="$PATH:$(echo /projects/main_project/*/bin | tr ' ' ':')"
问题是带有空格的路径是:
我的$ PATH 中的 subproject:with:spaces/bin/
答案 0 :(得分:3)
您应该使用printf
代替:
PATH="$PATH$(printf ":%s" /projects/main_project/*/bin)"
答案 1 :(得分:1)
循环会更清晰:
for subproj in /projects/main_project/*/bin; do
PATH+=":$subproj"
done
答案 2 :(得分:0)
另一种可能性(滥用IFS
- 但它也是出于这种目的!):
scratch=( /projects/main_project/*/bin )
IFS=: read -r PATH <<< "$PATH:${scratch[*]}"
下面的内容对你来说可能是矫枉过正,毫无用处!
如果您想要更强大的功能,即使PATH
未设置或为空,也能按预期工作:
scratch=( /projects/main_project/*/bin )
IFS=: read -r PATH <<< "${PATH:+$PATH:}${scratch[*]}"
最后你可能(正确!)认为使用globs是不安全的(即没有shell选项nullglob
或failglob
)设置:
old_nullglob=$(shopt -p nullglob)
shopt -s nullglob
scratch=( /projects/main_project/*/bin )
((${#scratch})) && IFS=: read -r PATH <<< "${PATH:+$PATH:}${scratch[*]}"
$old_nullglob
另一个想法,如果这些已经在你的PATH
中怎么办?我会把它留作家庭作业!