我想使用带有Sublime Text的SiblimeREPL包。当我尝试创建一个REPL时,我得到
SublimeREPL: obtaining sane environment failed in getenv()
Check console and 'getenv_command' setting
WARN: Falling back to SublimeText environment无论我尝试启动哪个REPL,都会发生这种情况。(我尝试过Ruby、Python和Clojure。)我尝试了Sublime Text 2和Sublime Text 3,结果相同。这是在Mac上,如果这很重要的话。
我查看了软件包设置,在那里我看到
"getenv_command": ["/bin/bash", "--login", "-c", "env"],如果我在终端提示符下运行"/bin/bash --login -c env“,则会列出我的环境。
为了获得成功的getenv_command,我需要进行哪些更改?
发布于 2015-12-01 14:48:11
我和ssgam有同样的问题。对我来说,问题在getenv方法中。它调用Python2.6中不存在的subprocess.check_output(getenv_command),,而ST2似乎正在使用它。
诀窍是,它只在getenv_command为真时调用subprocess.check_output(),否则默认调用os.environ.copy()。因此,要在不修改SublimeREPL包的情况下获得ssgam的修复,请在首选项>包设置> SublimeREPL >设置-用户中执行以下操作:
{
"getenv_command": false
}发布于 2015-11-11 21:11:06
我对这个问题进行了更深入的调查,似乎SublimeText 3也受到了影响。在我的例子中,问题与bash完成功能相关,特别是与COMP_WORDBREAKS环境变量相关。
使用以下命令显示COMP_WORDBREAKS的内容:
$ echo "$COMP_WORDBREAKS"将输出
"'><=;|&(:您还可以使用:
$ echo $COMP_WORDBREAKS但请注意,使用第二个命令(不带引号)时,您将不会看到该变量还包含换行符。
这里的问题是换行符破坏了getenv_command特性中的输出解析。如果你提取SublimeREPL的部分源代码,你可以从python解释器得到真正的错误信息。
Traceback (most recent call last):
File "main.py", line 71, in getenv
env = dict(line.split('=', 1) for line in lines)
ValueError: dictionary update sequence element #6 has length 1; 2 is required您可以将元素#6与环境清单中COMP_WORDBREAKS的位置相匹配。
解决方案(我首先想到的)
目前我不能说在应用了以下解决方案后,对bash完成功能的真正影响是什么,当然,希望SublimeREPL能够相应地得到修复。请对我的回答进行评论,以补充缺少的知识。
我们可能想要删除干扰字符以消除错误。首先,让我们确定这些字符
$ echo -n "${COMP_WORDBREAKS}" | od -t x1c将输出
0000000 20 09 0a 22 27 3e 3c 3b 7c 26 28 3a
\t \n " ' > < ; | & ( :
0000014所以我们有三个要移除。最简单的方法是在您的.bashrc中添加以下行:
COMP_WORDBREAKS="${COMP_WORDBREAKS#???}"瞧!不再出现错误消息。
我最后的想法是删除字符。我并不完全了解COMP_WORDBREAKS补全的工作原理,但我知道修改bash可能会影响其他使用它的脚本。现在,您可以随时对其进行临时更改。
我希望这对你有所帮助。
干杯
发布于 2015-11-11 11:12:44
找到了。修好了。SublimeREPL假设运行getenv_command将只生成运行环境的输出,并且每一行都将包含一个等号。但是我的.bash_profile向标准输出回显了一些东西。
解决方案是将我的.bash_profile输出包装在一个
if [[ $- == *i* ]] 除了执行的命令外,不产生额外的输出。
https://stackoverflow.com/questions/33643393
复制相似问题