如何让 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 中显示颜色的主要内容,如果未能解决你的问题,请参考以下文章

Linux编程 20 shell编程(shell脚本创建,echo显示信息)

如何在shell脚本里调用另一个shell脚本

如何写一个shell脚本在Linux下来运行main函数

shell脚本里,如何删除变量的最后一个字符?

如何通过双击在 OS X 中运行 shell 脚本?

shell 如何启动另外一个脚本执行,并传递参数