我用的是OSX10.8.3。在
如果你打开一个终端
echo $PATH
/usr/local/bin在那里,如果您通过sh或bash运行它的话
但是,python代码的输出:
^{pr2}$缺少/usr/local/bin路径
有人能解释一下$PATH是如何工作的吗?有什么东西能延伸它吗?为什么python脚本没有打印我在终端中看到的$PATH?它在linux发行版上的行为是否相同?在
我是怎么遇到的?我安装了一个sublime2插件js2coffee,该插件运行一个子进程(import subprocess),提供了一个exec的名称js2coffee—它位于/usr/local/bin中,这是python os env中没有的路径。为了修复它,我不得不将它添加到env中:
env = os.environ.copy()
env["PATH"] = "/usr/local/bin/"
js2coffee = subprocess.Popen(
'js2coffee',
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
env= env
)
终端窗口托管交互式shell,通常是
bash
。shell使用各种概要文件和“rc”文件初始化,如其手册页中所述(例如bash)。初始化将以多种方式改变环境。在尤其是,} 工具,将目录添加到
/etc/profile
运行^{PATH
变量中。在从Finder、Dock、Launchpad等启动的应用程序不运行shell,也没有类似的环境。它们从其父进程继承一个相当基本的环境,最终回到launchd。例如,请参见
launchctl export
的输出。您还可以使用Automator、AppleScript Editor或第三方工具Platypus从GUI应用程序运行env
命令来查看它有什么。在我不确定Linux shell的标准是什么,但同样的原则也适用。从桌面环境启动的程序将直接继承该环境。shell将使用各种脚本文件初始化其环境,因此可能具有不同的环境。在
相关问题 更多 >
编程相关推荐