使用带颜色/格式化字符的echo时出现Zsh问题

Adr*_*sbe 3 alias zsh

我只是切换到zsh,现在调整别名,其中打印一些文本(彩色)和命令.

我一直在尝试使用$ fg数组var,但是有副作用,所有命令在执行之前都会打印出来.
如果我只是在终端中使用颜色代码测试回声,则会发生同样的情况:

echo $fg_bold[blue] "test"
]2;echo "test"  test     #the test is in the right color
Run Code Online (Sandbox Code Playgroud)

为什么命令打印之前要做它应该做的事情?(我确切地说,只要打印出任何可用的命令就不会发生这种情况)我是否要为zsh设置一个特定选项,使用带有特殊参数的echo来获取它?

Fra*_*sco 6

首先执行命令(将其输出保留在某处),然后发出echo.我能想到的最简单的方法是:

echo $fg[red] `ls`
Run Code Online (Sandbox Code Playgroud)

编辑:好的,所以你的麻烦是在实际输出之前的一些垃圾echo.你有一些有趣的配置导致你的麻烦.

怎么做(检查配置除外):

  • 启动一个shell zsh -f(它将跳过任何配置),然后重新尝试echo命令:( autoload colors; colors; echo $fg_bold[red] foo这应该表明问题出在你的配置中).
  • 很可能你的配置定义了一个precmd在每个命令之前执行的函数(以某种方式失败).试试which precmd.如果没有定义,请尝试echo $precmd_functions(precmd_functions是在每个命令之前执行的函数数组).知道哪个是正在执行的代码将帮助您在配置中搜索它(我假设您刚刚从其他人那里获取).

如果我不得不猜测,我会说你在使用oh-my-zsh而不知道你打开了什么(这是一个无穷无尽的麻烦来源).