【问题标题】:How to get osx shell script to show colors in echo如何让 osx shell 脚本在 echo 中显示颜色
【发布时间】:2015-05-01 04:30:17
【问题描述】:

我正在尝试将颜色输出添加到我在 Mac 上运行的 bash 脚本中的错误中。问题是颜色不起作用。我创建了最简单的脚本来证明它不起作用:

#!/bin/bash

echo -e "\e[1;31m This is red text \e[0m"

但是,当我运行它时,我根本看不到任何颜色,如图所示。 ls 命令的颜色输出工作正常。

【问题讨论】:

  • 我很高兴知道 bash 已经过时了,更新它解决了我的问题。

标签: macos bash shell echo


【解决方案1】:

在脚本文件中printf 可能是另一种选择,但您必须添加尾随"\n"

#!/bin/bash

echo -e "\e[31mOutput as is.\e[m"
printf "\e[32mThis is green line.\e[m\n"
printf "\e[33;1m%s\n" 'This is yellow bold line.'

在 macOS High Sierra 10.13.6 上测试:

% /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

【讨论】:

    【解决方案2】:

    使用\033\x1B 代替\e 来表示<Esc> 字符。

    echo -e "\033[1;31m This is red text \033[0m"
    

    http://misc.flogisoft.com/bash/tip_colors_and_formatting

    【讨论】:

    • 太棒了!非常感谢。不知道为什么它没有被标记为正确答案
    【解决方案3】:

    另一个选项可能是使用 zsh,它尊重 \e 表示法。

    #!/bin/zsh
    

    【讨论】:

    • 从 macOS Catalina 开始,Mac 将使用 zsh 作为整个操作系统的默认登录 shell 和交互式 shell。
    【解决方案4】:

    OSX 附带不支持\e 转义字符的旧版本 Bash。使用 \x1B 或更新 Bash (brew install bash)。

    不过,更好的是使用tput

    【讨论】:

    • /usr/local/bin/bash --version 产生 GNU bash,版本 4.4.23(1)-release (x86_64-apple-darwin17.5.0) 版权所有 (C) 2016 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本3 或更高版本 gnu.org/licenses/gpl.html>
    • @nycynik 发布的 bash 版本在您发表评论前 46 个月有所不同;它还在 3.x 上。
    • 我的第二条评论是升级后的 bash 输出版本。
    • tput 大喊
    • 非常感谢您解释为什么 \e 不起作用!
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2012-05-20
    • 2017-07-11
    • 2017-11-16
    相关资源
    最近更新 更多