【问题标题】:Zsh trouble when using echo with color/formatting characters使用带有颜色/格式字符的 echo 时出现 Zsh 问题
【发布时间】:2013-05-09 20:27:15
【问题描述】:

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

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

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

为什么命令在执行它应该做的事情之前打印自己? (我准确地说,在没有任何可疑命令的情况下打印时不会发生这种情况) 我是否要为 zsh 设置一个特定选项,使用带有特殊参数的 echo 来解决这个问题?

【问题讨论】:

    标签: alias zsh


    【解决方案1】:

    先执行命令(保持其输出某处),然后发出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 却不知道你打开了什么(这样的麻烦无穷无尽)。

    【讨论】:

    • 可能不够清楚。问题是 commandecho 将打印 ]2;echo bedore 以打印剩余的内容。将编辑我的问题
    • 问题来自 oh-my-zsh 函数标题,它应该使用运行的命令更新终端的标题,命令标题挂钩到函数 omz_termsupport_preexec 要修复它,我必须在 zshrc 文件中设置 > DISABLE_AUTO_TITLE ="true" set -x 对我调试和查找来源非常有用
    【解决方案2】:

    我没有复制您的问题,我认为这表明它要么是一个选项(我已设置),要么是 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,但阅读您的问题时,您似乎只在使用别名时才看到这种行为(在输入后回显命令)......?

    【讨论】:

    • 使用 print 改变它。我尝试了 hithout 初始化文件并且运行良好,所以它必须来自我所做的配置。 (我使用了 oh-my-zsh,并调整了一些以前的 bash 配置)。我稍后会挖掘它,而不是现在的优先级。我会告诉你我发现了什么。
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2020-10-27
    • 2012-06-17
    • 2021-09-18
    • 2019-10-16
    • 2021-05-17
    • 2020-08-11
    相关资源
    最近更新 更多