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

时间:2013-05-15 10:01:56

标签: alias zsh

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

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

echo $fg_bold[blue] "test"
]2;echo "test"  test     #the test is in the right color

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

2 个答案:

答案 0 :(得分:6)

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

echo $fg[red] `ls`

编辑:好的,所以在echo的实际输出之前你的麻烦是一些垃圾。你有一些有趣的配置会给你带来麻烦。

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

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

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

答案 1 :(得分:3)

我不会复制您的问题,我认为这表明它是一个选项(我已设置),或者是zsh版本问题:

$ echo $fg_bold[red] test
 test

因为我无法复制它,我确信有一个选项可以阻止它发生。我不知道那个选项是什么(我正在使用经过大量修改的oh-my-zsh,但仍然没有完成所有zsh选项的功能。

我的建议:

您可以尝试使用print

$ print $fg_bold[red] test
 test

print内置版除echo之外还有更多选项(请参阅man zshbuiltins)。

您还应该:

  • 检查您使用的zsh版本。
  • 检查启用了哪些选项(setopt)。
  • 检查您的~/.zshrc(和other loaded files),了解正在运行的选项和功能(如果有)。

This question可能会建议检查您正在使用的TERM,但是在您使用别名时,您只是看到这种行为(在输入后回显命令) ...?