php*_*_qq 4 bash path environment-variables
我在我的主目录中本地安装了一堆应用程序。为了使它们在全球范围内可用,我将它们添加PATH
到.bashrc
:
PATH="$PATH:/home/user/apps/app1/bin"
PATH="$PATH:/home/user/apps/app2/bin"
PATH="$PATH:/home/user/apps/appn/bin"
Run Code Online (Sandbox Code Playgroud)
我该如何设置才能不必添加每个新的?我正在尝试这个,但它不起作用:
PATH="$PATH:/home/user/apps/*/bin"
Run Code Online (Sandbox Code Playgroud)
注意:我知道我可以用循环添加它们,但我也担心我的PATH
变量会变得太大,我想知道是否可以以某种方式使用通配符。
通配符不会在$PATH
, no 中扩展。根据bash 手册,PATH 是:
以冒号分隔的目录列表,shell 在其中查找命令
(我的重点)。
从另一个方向来看,手册的命令搜索和执行部分说,部分内容是:
如果该名称既不是 shell 函数也不是内置函数,并且不包含斜杠,Bash 将搜索 $PATH 的每个元素以查找包含该名称的可执行文件的目录。
...(我的重点)——它没有提到对路径元素进行的任何特殊处理,只是说它们应该是目录(按原样)。
我暂时不确定 bash 变量的大小限制是多少;我怀疑它是可用内存。PATH不需要导出,但很多人都这样做;如果导出,则需要与其他环境变量和参数一起放入getconf ARG_MAX
(参考:https: //unix.stackexchange.com/a/124422/117549)。大型 PATH 目录不应引起太多性能开销,因为 bash 使用哈希表来记住先前找到的命令(每个会话)的位置。
如果您在将每个单独的应用程序目录添加到 PATH 时确实遇到了限制(视觉或技术),我建议您向 PATH 添加一个“符号链接”目录,然后您可以在其中链接来自各个应用程序的所需可执行文件。