如何让 osx shell 脚本在 echo 中显示颜色
Posted
技术标签:
【中文标题】如何让 osx shell 脚本在 echo 中显示颜色【英文标题】:How to get osx shell script to show colors in echo 【发布时间】:2015-05-01 04:30:17 【问题描述】:我正在尝试将颜色输出添加到我在 Mac 上运行的 bash 脚本中的错误中。问题是颜色不起作用。我创建了最简单的脚本来证明它不起作用:
#!/bin/bash
echo -e "\e[1;31m This is red text \e[0m"
但是,当我运行它时,我根本看不到任何颜色,如图所示。 ls 命令的颜色输出工作正常。
【问题讨论】:
我很高兴知道 bash 已经过时了,更新它解决了我的问题。 【参考方案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
不起作用!以上是关于如何让 osx shell 脚本在 echo 中显示颜色的主要内容,如果未能解决你的问题,请参考以下文章