使用 find 将子目录添加到 bash 中的 $PATH

使用 find 将子目录添加到 bash 中的 $PATH

我试过这个

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 中)。

相关内容