V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Usaki
V2EX  ›  Linux

关于 RH 系+ Python 环境+ohmyzsh 的 BUG

  •  
  •   Usaki · 2021-09-08 15:22:09 +08:00 · 1432 次点击
    这是一个创建于 1163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前段时间给一个 CentOS7 机器装 zsh5.8(编译装)+python3.9 (编译装)+ohmyzsh (离线装) 然后在 source python 环境后切换 bash 总会把当前 bash 变成奇奇怪怪的显示 如:

    (.pyenv) [root:~]# bash (.pyenv) [%{[]%}%B%n%b%{%}:%{[red]%}%30<...<%~%<<%{%}]%(!.#.$)

    (.pyenv) ➜ ~ bash bash: git_prompt_info: command not found (.pyenv) %(?:%{%}➜ :%{%}➜ ) %{[cyan]%}%c%{%}

    上面是 ohmyzsh 的 mh 主题,下面是默认 robbyrussell 主题

    然后我试过换成 yum 安装的 zsh,官方脚本装 ohmyzsh 或者其他 python3.7 和 3.8 版本都有这个问题,甚至换成 CentOS8 系统,RHEL7/8 和 rocky linux 我也试过,都有这个问题

    然后我换成 ubuntu18.04 和 20.04 就没有这个问题了

    是不是 ohmyzsh 对 RH 系的 pyenv 有兼容问题

    触发过程:登录系统,zsh ( chsh 默认) → source ~/.pyenv/bin/activate → bash

    4 条回复    2021-09-09 16:45:48 +08:00
    lululau
        1
    lululau  
       2021-09-08 17:26:00 +08:00
    怎么看出来这是个 BUG 的呢

    zsh ( chsh 默认) → source ~/.pyenv/bin/activate → (unset PS1; unset PROMPT; bash; )

    所以为什么要在 zsh 里套个 bash 呢
    Usaki
        2
    Usaki  
    OP
       2021-09-09 10:23:30 +08:00
    @lululau 我换了个方法,先 source ~/.pyenv/bin/activate 再 zsh,然后切换 bash 就没问题了

    有时候也要用回 bash~
    Usaki
        3
    Usaki  
    OP
       2021-09-09 10:24:13 +08:00
    @lululau 但是 ubuntu 和 debian 切换的时候都有没有出现奇怪字符的问题
    Kobayashi
        4
    Kobayashi  
       2021-09-09 16:45:48 +08:00   ❤️ 1
    git_prompt_info function 是由 omz 定义,被 robbyrussell 设置。可能是因为你 export 了 PS1 变量,CentOS 默认的 bash 配置导致切换 bash 继承了父级 PS1. (也有可能是 PROMPT 变量,在 ZSH 中 PROMPT 相当于 PS1 的别名)

    可能的解决方案:取消 export PS1 和 export PROMPT,只是定义为全局变量。

    不过,为什么要手动切换到 bash 呢,有这种必要吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:02 · PVG 06:02 · LAX 14:02 · JFK 17:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.