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

6xfqseft  于 2023-08-07  发布在  Shell
关注(0)|答案(6)|浏览(120)

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

#!/bin/bash

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

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


的数据

yzxexxkh

yzxexxkh1#

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

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

字符串
参见http://misc.flogisoft.com/bash/tip_colors_and_formatting

xpszyzbs

xpszyzbs2#

OSX附带了一个旧版本的Bash,它不支持\e转义字符。使用\x1B或更新Bash(brew install bash)。
不过,更好的方法是使用tput

z3yyvxxp

z3yyvxxp3#

在脚本文件中,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.

gg58donl

gg58donl4#

另一种选择是使用zsh,它遵循\e表示法。

#!/bin/zsh

字符串

ukdjmx9f

ukdjmx9f5#

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

#!/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"

字符串

结果:

x1c 0d1x的数据

8iwquhpp

8iwquhpp6#

一个快速的例子,你可以改变文本的颜色。它可以与许多不同版本的bash一起工作(MacOSready也在fedora33KDE和ubuntujellyfish 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

相关问题