2

我有一个用 ruby​​ 编写的 TextMate 包,它可以访问 ENV 哈希以读取 shell 变量。

它有时会成功读取这个变量,有时却找不到。我一直无法弄清楚模式。

什么决定了哪些 shell 变量对 TextMate 包可见?

更新

啊哈!当我从命令行启动 TextMate 时,它​​可以工作。如果我从扩展坞启动它,它就不起作用(即使我随后从命令行打开一个目录)。

那么现在的问题是,为什么 TextMate 在这些情况下会选择拾取不同的环境,有没有办法让它们相同呢?

4

1 回答 1

2

Textmate 是通过 launchd 启动的,而不是从 shell 启动的。

如果您直接从 shell 运行某些东西,您的 $PATH 将会遍历(open -a Textmate 不起作用,open 不会将您的环境传递给 Textmate)。

解决这个问题的方法是 environment.plist、launchctl 或 launchd.conf:

在 OS X 中设置环境变量?

更新

如果您编辑/etc/launchd.conf并重新启动,更改将生效。每一行都可以是一个 launchctl 命令,例如setenv VAR_NAME "VAR_VALUE". 然后,您可以使用launchctl your_file.

不过重启还是很痛苦的。如果你想要每个用户的环境设置,那就不好了。Apple 提议~/.launchd.conf可用于用户特定的设置,但尚未实现此功能。

您可以使用 LoginHook 和 LogoffHook 设置脚本以在登录时运行(请参阅Apple 的文档)。或者,使用 LaunchAgents。有关如何设置 LaunchAgent 的详细说明,请查看 nicksay 在此 Macworld 帖子上的帖子

登录时该launchctl setenv命令似乎不起作用。我目前正在为此努力。

我遇到了您今天遇到的基本相同的问题(Makefile 包不会将 LIBRARY_PATH 传递给 gcc),现在我正在编写一个 python 脚本,它将在登录时读取变量分配文件,存储当前的副本环境和带有分配的文件,然后在注销时卸载所有变量。这也提醒我,我应该有一个更新选项。完成后,我将在此处发布带有 github 存储库链接的评论。如果它有效,那就是。

于 2011-04-11T19:15:12.543 回答