![使用 find 将子目录添加到 bash 中的 $PATH](https://linux22.com/image/106038/%E4%BD%BF%E7%94%A8%20find%20%E5%B0%86%E5%AD%90%E7%9B%AE%E5%BD%95%E6%B7%BB%E5%8A%A0%E5%88%B0%20bash%20%E4%B8%AD%E7%9A%84%20%24PATH.png)
我试过这个
PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )
但它仅适用于 Linux,在 OSX(或 Freebsd)上,它不起作用,因为-printf
它不是 POSIX。如何为两个平台编写兼容版本?
答案1
对 bash 或 dash shell 执行此操作:
PATH=$PATH$(find $HOME/scripts/ -type d -exec printf ":%s" {} +)
另外,如果你想使用fish shell,你可以这样做:
set -x PATH $PATH (find $HOME/scripts/ -type d -exec printf ":%s" \{\} +)
答案2
由于您用 标记并给 Q 加上标题bash
,所以这是一个根本不需要的解决方案find
- 它使用 bash 的环球星递归目录:
PATH=${PATH}$(shopt -s globstar dotglob; printf ":%s" ~/scripts/**/)
shopt 在子 shell 中运行,因此它们不会影响您正在运行的 shell。有printf
一个内置的 bash;我小心翼翼地把冒号前printf 格式字符串%s
中的 ,这样您就不会在末尾出现无意的空路径字符串(相当于添加.
到您的 PATH 中)。