【问题标题】:Why do my TextMate bundles sometimes not have access to environment/shell variables?为什么我的 TextMate 包有时无法访问环境/shell 变量?
【发布时间】:2011-04-06 19:13:00
【问题描述】:

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

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

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

更新

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

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

【问题讨论】:

  • 我不确定,但我不知道您是否有想要始终覆盖的变量,您可以通过首选项添加它。

标签: shell environment-variables textmate textmatebundles


【解决方案1】:

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

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

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

Setting environment variables in OS X?

更新

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

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

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

launchctl setenv 命令在登录时似乎不起作用。我目前正在努力解决这个问题。

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

【讨论】:

  • 当然必须有某种解决方法来始终将一个人的环境合并到 Textmate 看到的内容中?此外,这并不能解释为什么它有时但并非总是有效。
  • 啊哈——当我从命令行启动 textmate 时,它​​可以工作。如果我从扩展坞启动它,它就不起作用(即使我随后从命令行打开一个目录)。
猜你喜欢
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多