我只是切换到zsh,现在适应别名,其中打印一些文本(彩色)随着一个命令。
我一直在尝试使用$fg数组var,但是有一个副作用,所有的命令在执行之前被打印。
如果我只是在终端中测试一个带有颜色代码的echo,也会发生同样的情况:
echo $fg_bold[blue] "test"
]2;echo "test" test #the test is in the right color
为什么命令在做它应该做的事情之前打印自己?(我确定这不会发生在没有任何变量命令的情况下打印)我是否需要为zsh设置一个特定的选项,使用带有特殊参数的echo来获取它?
首先执行命令(将其输出保存在某处),然后发出echo
。我能想到的最简单的方法是:
echo $fg[red] `ls`
编辑:好的,所以你的问题是在echo
实际输出之前的一些垃圾。你有一些奇怪的配置给你带来了麻烦。
该怎么做(除了检查你的配置):
- 用
zsh -f
启动shell(它将跳过任何配置),然后重新尝试echo
命令:autoload colors; colors; echo $fg_bold[red] foo
(这应该表明问题在您的配置中)。 - 很可能您的配置定义了一个
precmd
函数,该函数在每个命令之前执行(以某种方式失败)。试试which precmd
。如果没有定义,试试echo $precmd_functions
(precmd_functions
是一个函数数组,在每个命令之前执行)。知道正在执行的代码将帮助您在配置中搜索它(我假设您只是从其他人那里获取)。
如果要我猜的话,我会说您正在使用oh-my-zsh而不知道您打开了什么(这是像这样的麻烦的无尽来源)。
我不复制你的问题,我认为这表明它要么是一个选项(我已经设置),要么是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
(和其他加载的文件),看看什么,如果有的话,选项和函数正在运行。
这个问题可能建议检查你正在使用的TERM
,但是阅读你的问题听起来像你只看到这种行为(输入后命令的回声)当你使用别名…?