我使用名为virtualenvwrapper
的{{1}}创建了一个virtualenv。当我输入augpy
时,它工作正常并正确激活。但是,当我尝试单独使用workon augpy
列出virtualenvs时,我得到一个奇怪的输出:
workon
我不知道为什么会这样 - 也许它对我正在使用的shell感到困惑?我目前正在使用zsh(5.0.2,OSX 10.8)和$ workon
]7;file://new-host.home/Users/Me/.virtualenvsaugpy
作为我的默认shell。当我在 bash 中输入oh-my-zsh
时,我会得到正确的结果(并且自动完成功能也可以):
workon
我应该为zsh设置具体的内容吗?
答案 0 :(得分:2)
这是部分答案,我很害怕。
你看到的问题与oh-my-zsh无关。该问题在virtualenvwrapper.sh
的第539行引入。
在zsh中调用的子shell返回STDOUT上的最后一个工作目录,包含在控制字符中。这很容易验证:
(cd /) | cat -v
我无法在任何地方找到此功能。也许它是最近推出的,比如zsh 5.0?
在fmt
中的virtualenvwrapper_show_workon_options()
函数中调用的virtualenvwrapper.sh
命令使得此返回路径可见,从而搞砸了输出。
由evadeflow在下面的评论提示,我做了一些进一步挖掘,发现实际问题在于我改变OS X终端代理图标的方式。实际上,事实证明,oh-my-zsh使用完全相同的方法。在撰写本文时,我已经在GitHub上提交了一个pull请求,以便在oh-my-zsh中修复此问题。
答案 1 :(得分:0)
这也可以通过将控制字符保护的路径发送到STDERR而不是STDOUT来解决。
在之前链接的macworld提示中,这需要将命令printf '\e]7;%s\a' "$PWD_URL"
更改为printf '\e]7;%s\a' "$PWD_URL" 1>&2
。