2011-04-06 51 views
2

我有一個用ruby寫的TextMate包,它訪問ENV哈希以讀取shell變量。爲什麼我的TextMate軟件包有時無法訪問環境/ shell變量?

它有時會成功讀取此變量,有時無法找到它。我一直無法弄清楚這種模式。

什麼決定哪些shell變量對TextMate包可見?

更新

啊哈哈!當我從命令行啓動TextMate時,它起作用。如果我從碼頭啓動它,它不起作用(即使我隨後從命令行打開目錄)。

所以現在的問題是,爲什麼TextMate選擇在這些情況下選擇不同的環境,並且有沒有辦法使它們相同?

+0

林不知道,但我不知道,如果你有一個變量,你想總是overrided你可以通過首選項添加它。 – prodigitalson 2011-04-06 19:19:05

回答

2

Textmate通過launchd啓動,而不是從shell啓動。

如果您直接從shell運行某些內容(打開-a Textmate不起作用,打開將不會將您的環境傳遞給Textmate),則$ PATH將遍歷。

來解決這個問題的辦法是environment.plist,launchctl,或launchd.conf的:

Setting environment variables in OS X?

更新

如果編輯/etc/launchd.conf並重新啓動,更改將生效。每行可以是一個launchctl命令,如setenv VAR_NAME "VAR_VALUE"。然後你可以用launchctl your_file運行這個文件。這是一個不得不重啓的痛苦。如果你想要每個用戶的環境設置,這是不好的。 Apple建議~/.launchd.conf可用於用戶特定的設置,但尚未實現此功能。

您可以設置腳本以使用LoginHook和LogoffHook在登錄時運行(請參閱Apple's documentation)。或者,使用LaunchAgents。有關如何設置LaunchAgent的詳細說明,請參閱this Macworld post上nicksay的帖子。

launchctl setenv命令在登錄時似乎不起作用。我目前正在對此進行抨擊。

我遇到了與今天基本相同的問題(Makefile包不會將LIBRARY_PATH傳遞給gcc),現在我正在編寫一個python腳本,它將在登錄時讀取變量賦值文件,存儲將當前環境和該文件與作業複製,然後卸載註銷時的所有變量。這也提醒我,我應該有一個更新選項。當我完成後,我會在這裏發佈一條評論,指向這裏的github回購鏈接。如果它有效,那就是。

+0

當然,必須有某種解決方法來始終將自己的環境合併到Textmate看到的內容中?此外,這並不能解釋爲什麼它有時會但不是全部都有效。 – 2011-04-12 01:02:48

+0

啊哈 - 當我從命令行啓動textmate,它的工作。如果我從碼頭啓動它,它不起作用(即使我隨後從命令行打開目錄)。 – 2011-04-12 01:05:18

+0

(更新了問題) – 2011-04-12 01:06:26