如何更新$PATH

3
我正在编写一个Python/PyGTK应用程序,它将在$HOME中的某个特定文件夹(例如~/.custom_scripts)中添加一些自定义脚本(bash)。
我想让该文件夹在$PATH中可用。因此,每次Python应用程序添加脚本时,当用户打开终端(例如gnome-terminal)时,该脚本就可以立即使用。
您建议在哪里“注入”这个$PATH依赖关系?是.bashrc/etc/profile.d等? 我可能会遇到什么优缺点?
例如,如果我将一个脚本添加到/etc/profile.d中以导出新路径,则在重新登录之前不会更新路径。
谢谢
7个回答

2
如果是针对每个用户的安装,那么.profile是一个合理的位置;如果是针对整个系统的安装,则使用/etc/profile.d。(当然,这需要root权限。)
除非通过source运行(这很奇怪),否则您的安装程序无法更改当前shell的路径。

2

对于放在$HOME目录中的脚本,您通常会使用$HOME/bin文件夹,该文件夹(通常)在路径上。


1

/etc/profile.d 会将其添加到每个用户的路径中

~/.bashrc 只会影响你自己

你可以随时执行 "$ source ~/.bashrc" 命令来重新读取配置文件。


1

编辑:我误读了原问题,因此这段代码片段仅适用于修改PATH,但不适用于持久化...

可以使用os模块完成所有操作:

import os
USER_HOME = os.path.expanduser('~')
os.environ['PATH'] += ":" + os.path.join(USER_HOME, '.custom_scripts')

这个操作将:~/.custom_scripts添加到$PATH的末尾,因为PATH必须始终以冒号分隔。


只要你的Python脚本在运行,这个功能就相当无用。 - Wooble
哈哈,这是我的阅读理解错误。我已经更新了我的答案以反映有限的有用范围。羞愧 - jathanism

1

每次打开gnome-terminal时都会读取~/.bashrc(假设用户已将SHELL设置为/bin/bash)。

请务必检查os.environ ['PATH'],以查看目录是否已经添加,以便脚本不会重复添加它。


1

你不应该这样做。用户可以选择是否将其添加到PATH中,以及在什么情况下以及如何实现。你可以做的是告知用户脚本所在的目录,并建议将其添加到PATH中。

或者也许你是从用户的角度提出问题?


这就是该应用程序正在做的事情,管理“自定义”脚本...当安装此应用程序时,用户已经预期到这一点。 - Andrei Ciobanu

-1
为什么不在第一次调用模块时(即在模块的__init__.py中)建立适当的PATH:
# this is your module's __init__.py
import sys
eggs = ['/path/to/egg/1.egg', '/path/to/egg/2.egg']
for egg in eggs:
    sys.path.append(egg)

sys.path 不是 $PATH;前者是 Python 解释器搜索模块的位置,后者是操作系统搜索可执行文件的位置。 - cjs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接