Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的TextMate捆绑包有时无法访问环境/shell变量?_Shell_Environment Variables_Textmate_Textmatebundles - Fatal编程技术网

为什么我的TextMate捆绑包有时无法访问环境/shell变量?

为什么我的TextMate捆绑包有时无法访问环境/shell变量?,shell,environment-variables,textmate,textmatebundles,Shell,Environment Variables,Textmate,Textmatebundles,我有一个用ruby编写的TextMate包,它访问ENV散列来读取shell变量 它有时能成功地读取这个变量,有时却找不到。我一直想不出这个模式 什么决定了TextMate捆绑包可以看到哪些shell变量 更新 啊哈!当我从命令行启动TextMate时,它可以工作。如果我从dock启动它,它将不起作用(即使我随后从命令行打开一个目录) 所以现在的问题是,为什么TextMate在这些情况下选择不同的环境,有没有办法使它们完全相同?TextMate是通过launchd启动的,而不是从shell启动的

我有一个用ruby编写的TextMate包,它访问ENV散列来读取shell变量

它有时能成功地读取这个变量,有时却找不到。我一直想不出这个模式

什么决定了TextMate捆绑包可以看到哪些shell变量

更新

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


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

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

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

解决此问题的方法有environment.plist、launchctl或launchd.conf:

更新

如果编辑
/etc/launchd.conf
并重新启动,更改将生效。每行可以是一个launchctl命令,如
setenv VAR\u NAME“VAR\u VALUE”
。然后,您可以使用
launchctl\u文件运行此文件

但是重新启动是一件痛苦的事情。如果您想要每个用户的环境设置,这是不好的。苹果建议将
~/.launchd.conf
用于用户特定的设置,但尚未实现此功能

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

登录时,
launchctl setenv
命令似乎不起作用。我现在正忙着解决这个问题


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

我不确定,但我不知道你是否有一个要始终覆盖的变量,你可以通过首选项添加它。当然,必须有某种解决方法来始终将你的环境合并到Textmate看到的环境中?而且,这并不能解释为什么它有时有效,但不是一直有效。啊哈——当我从命令行启动textmate时,它就有效了。如果我从dock启动它,它将不起作用(即使我随后从命令行打开一个目录)。