看起来当将目录添加到 $PATH 时,其子目录不会递归添加。那么我可以这样做吗?或者是否有不支持的原因?
答案1
通常的 UNIX 目录结构将应用程序文件按类型分类到目录中:bin
用于可执行文件、lib
用于库、doc
用于文档等。那就是它们被安装在单独的目录中;通常应用程序被分组到几个目录中(因此许多系统只有$PATH
: /usr/local/bin
、/usr/bin
和中的三个目录/bin
)。一个目录中同时存在可执行文件和子目录的情况很少见,因此不需要在$PATH
.
bin
有时可能有用的是将给定目录的子目录的所有子目录包含在$PATH
:
for d in /opt/*/bin; do PATH="$PATH:$d"; done
然而,这种情况很少发生。当可执行文件位于非标准目录中时,通常的方法$PATH
是在路径中的目录中创建符号链接,例如/usr/local/bin
.这stow
实用程序(或xstow
)在这方面可能很有用。
答案2
答案3
不支持这一点的原因之一是 bin/ (和类似的)目录使用符号链接指向安装程序的实际可执行文件的特定目录。
因此,如果您$PATH
包含/usr/local/bin
(很可能会这样做),则该文件夹充满了符号链接(如ruby
),它们指向运行 ruby 的代码所在的特定目录(如../Cellar/ruby/2.1.3/bin/ruby
)。
这就是为什么您不必在 ; 中指定每个可执行文件的文件夹$PATH
。通常在 bin/ type 目录中找到的符号链接会为您处理该问题。
答案4
答案在 Mac OS 上对我不起作用,所以我找到了一种有效的方法:
export PATH=$PATH:$(find $HOME/apps -type d -maxdepth 1 | paste -sd ":" -)
我希望它有帮助!
笔记:这还包括文件夹本身。