如何让 osx shell 脚本在 echo 中显示颜色

问题描述 投票:0回答:6

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

#!/bin/bash

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

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

enter image description here

macos bash shell echo
6个回答
120
投票

使用

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

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

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


57
投票

OSX 附带旧版本的 Bash,不支持

\e
转义字符。使用
\x1B
或更新 Bash (
brew install bash
)。

更好的是,使用

tput


17
投票

在脚本文件中

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.

5
投票

另一种选择是使用 zsh,它遵循

\e
符号。

#!/bin/zsh

4
投票

我从@cu39答案中编写了函数并像这样使用它:

#!/bin/bash

printy() {
  printf "\e[33;1m%s\n" "$1"
}
printg() {
  printf "\e[32m$1\e[m\n"
}
printr() {
  echo -e "\033[1;31m$1\033[0m"
}

printr "This is red"
printy "This is yellow"
printg "This is green"

结果:

enter image description here


3
投票

如何更改文本颜色的快速示例。它正在与许多人合作 不同版本的 bash(Mac OS Ready 也在 fedora 33 KDE 和 ubuntu jellyfish gnome 上进行了测试)。

在这个例子中向您展示它是如何工作的,我使用

echo
带有
-e
选项的命令可启用解释反斜杠转义,然后使用 这部分
\x1B[HX;Ym
开始文本修改。

H for  Highlight option
H = 3 --> Color text       H = 4 --> Highlight text

X for the color
X = 1 --> Red              X = 2 --> Green
X = 3 --> Yellow/orange    X = 4 --> Blue light
X = 5 --> Purple           X = 6 --> Blue dark

Y for the format
Y = 1 --> Bold             Y = 2 --> Normal
Y = 3 --> Italic           Y = 4 --> Underline

完成文本修改后,使用

\x1B[0m

在您的终端上尝试:

echo -e "Hello my name is \x1B[34;2mVictor\x1B[0m I'm a \x1B[33;2msys-admin\x1B[0m \!\n"

https://github.com/victor-sys-admin/MODIFY_TEXT_OUTPUT_COLOR_BASH

© www.soinside.com 2019 - 2024. All rights reserved.