我想更改PATH
bash 中的默认变量。另外,我知道可以写入,export PATH=$PATH:/path/to/commands
但这不是我的解决方案。我希望任何使用系统调用的应用程序都可以使用新路径。
例如在python代码中:
from os import system
system('my-special-command')
my-special-command
存储在/path/to/my/commands/dir/my-special-command
答案1
这PATH
是在系统的不同级别定义的。进程和子 shell 会从父 shell 继承设置。因此,如果您export
在终端中更改路径,则更改将在当前 shell 和该终端的任何子 shell 中有效。
虽然您可以为要放置在系统各处的每个可执行文件添加自定义路径,但这种方法很快就会变得难以操作。您需要将安装的任何其他应用程序的目录添加到 PATH。这会限制程序的可移植性。
在我们指出如何在更高层次上改变 PATH 之前,我建议考虑其他更好的方法。
将可执行文件放在默认路径之一中
相反,坚持使用传统方法来定制您的应用程序,就像 Ubuntu 维护人员在配置系统自带的应用程序时坚持进行一些转换一样。
对于您的自定义应用程序,这意味着:将它们安装在您想要的任何地方。然后在 PATH 中提到的目录之一中安装可执行文件。
对于您的自定义程序,/usr/local/bin
是放置可执行文件的适当常规位置。如果您需要可执行文件按用户提供,请将可执行文件放在~/.local/bin
。留给/usr/bin
系统软件管理部门管理。
可执行文件可以是二进制文件、安装在其他地方的可执行文件的符号链接或包装脚本。
在可执行文件中编码路径
不要依赖程序中非标准的系统范围 PATH 设置,而是在可执行文件本身中定义自定义 PATH 来查找资源。要使其可移植,请使用基本目录(即安装程序的目录),并在下面的目录结构中找到资源。在运行时,可执行文件可以确定其所在的路径。将该路径放入变量中,例如 RUN_PATH,然后使用相对路径找到资源,例如 $RUN_PATHS/icons 下的图像等。
更改系统范围的 PATH
如果你坚持按照自己的方式做,请随意。这是你的系统。这是一种更改 PATH 变量在启动过程的早期阶段。如前所述,这种方法移植起来既困难又不优雅。如果每个人都决定按照你的方式工作,那么用户系统上的 PATH 就会很长,其中包含自定义条目。较长的路径会减慢在系统上查找和执行任何可执行文件的速度。