前些天给命令行设置标题遇到一奇葩问题,最终调试发现是 Oh-My-Zsh 的锅。
在启用 Oh-My-Zsh 后,使用命令:
echo -e "\033];this is the title\007"
居然无法修改终端窗口标题?不过,仔细观察还是会注意到标题「闪」了一下,说明还是存在效果,只不过被某种「神秘力量」重设了回来,
最开始怀疑是不是 iTerm2 之类的锅,换成 Terminal 问题依旧。
随后开始尝试使用 bash
执行上文的命令,正常工作。因此问题应该出在 Zsh 周边。
于是使用 zsh -d -f
(即不加载任何 RC 文件,最原始的 zsh)再次调试,可以正常工作。所以罪魁祸首应当就隐藏在 ~/.zshrc
之中。
最终经过排查,发现是由于 Oh-My-Zsh 的一个名为 Auto title
的功能造成的,参考:https://github.com/robbyrussell/oh-my-zsh/issues/5700。
大致解决方案有两种:
- 在 .zshrc 内写入环境变量
DISABLE_AUTO_TITLE="true"
。 - 因为我的最终目的是修改而非禁用,故亦可直接修改
ZSH_THEME_TERM_TITLE_IDLE
环境变量作为空闲时的标题,参考 这段源码。
最终,我在 ~/.zshrc
末尾加入一行:
ZSH_THEME_TERM_TITLE_IDLE="%~" # 将当前工作目录短路径设为终端标题
注意,以上语句应在 Oh-My-Zsh 载入之后,否则将会被 这段源码 覆盖。
问题解决。