首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sublimerepl getenv失败

sublimerepl getenv失败
EN

Stack Overflow用户
提问于 2015-11-11 10:39:53
回答 7查看 4K关注 0票数 7

我想使用带有Sublime Text的SiblimeREPL包。当我尝试创建一个REPL时,我得到

代码语言:javascript
复制
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上,如果这很重要的话。

我查看了软件包设置,在那里我看到

代码语言:javascript
复制
"getenv_command": ["/bin/bash", "--login", "-c", "env"],

如果我在终端提示符下运行"/bin/bash --login -c env“,则会列出我的环境。

为了获得成功的getenv_command,我需要进行哪些更改?

EN

回答 7

Stack Overflow用户

发布于 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 >设置-用户中执行以下操作:

代码语言:javascript
复制
{
  "getenv_command": false
}
票数 16
EN

Stack Overflow用户

发布于 2015-11-11 21:11:06

我对这个问题进行了更深入的调查,似乎SublimeText 3也受到了影响。在我的例子中,问题与bash完成功能相关,特别是与COMP_WORDBREAKS环境变量相关。

使用以下命令显示COMP_WORDBREAKS的内容:

代码语言:javascript
复制
$ echo "$COMP_WORDBREAKS"

将输出

代码语言:javascript
复制
"'><=;|&(:

您还可以使用:

代码语言:javascript
复制
$ echo $COMP_WORDBREAKS

但请注意,使用第二个命令(不带引号)时,您将不会看到该变量还包含换行符。

这里的问题是换行符破坏了getenv_command特性中的输出解析。如果你提取SublimeREPL的部分源代码,你可以从python解释器得到真正的错误信息。

代码语言:javascript
复制
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能够相应地得到修复。请对我的回答进行评论,以补充缺少的知识。

我们可能想要删除干扰字符以消除错误。首先,让我们确定这些字符

代码语言:javascript
复制
$ echo -n "${COMP_WORDBREAKS}" | od -t x1c

将输出

代码语言:javascript
复制
0000000  20  09  0a  22  27  3e  3c  3b  7c  26  28  3a
             \t  \n   "   '   >   <   ;   |   &   (   :
0000014

所以我们有三个要移除。最简单的方法是在您的.bashrc中添加以下行:

代码语言:javascript
复制
COMP_WORDBREAKS="${COMP_WORDBREAKS#???}"

瞧!不再出现错误消息。

我最后的想法是删除字符。我并不完全了解COMP_WORDBREAKS补全的工作原理,但我知道修改bash可能会影响其他使用它的脚本。现在,您可以随时对其进行临时更改。

我希望这对你有所帮助。

干杯

票数 6
EN

Stack Overflow用户

发布于 2015-11-11 11:12:44

找到了。修好了。SublimeREPL假设运行getenv_command将只生成运行环境的输出,并且每一行都将包含一个等号。但是我的.bash_profile向标准输出回显了一些东西。

解决方案是将我的.bash_profile输出包装在一个

代码语言:javascript
复制
if [[ $- == *i* ]] 

除了执行的命令外,不产生额外的输出。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33643393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档