我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
当前回答
其他的答案已经很好地解释了如何做到这一点。我仍然缺少的是对颜色代码的一个精心安排的概述。维基百科文章“ANSI转义码”对此非常有用。然而,由于颜色通常可以在每个终端中进行配置,并且看起来不同,所以我更希望有一个可以在终端中调用的功能。为此,我创建了以下函数来显示颜色表,并提醒我如何设置它们(排列方式受wiki文章的启发)。例如,您可以将它们加载到.bashrc/.zshrc中,或将它们作为脚本放在某处。
256色
由bash/zsh脚本生成:
function showcolors256() {
local row col blockrow blockcol red green blue
local showcolor=_showcolor256_${1:-bg}
local white="\033[1;37m"
local reset="\033[0m"
echo -e "Set foreground color: \\\\033[38;5;${white}NNN${reset}m"
echo -e "Set background color: \\\\033[48;5;${white}NNN${reset}m"
echo -e "Reset color & style: \\\\033[0m"
echo
echo 16 standard color codes:
for row in {0..1}; do
for col in {0..7}; do
$showcolor $(( row*8 + col )) $row
done
echo
done
echo
echo 6·6·6 RGB color codes:
for blockrow in {0..2}; do
for red in {0..5}; do
for blockcol in {0..1}; do
green=$(( blockrow*2 + blockcol ))
for blue in {0..5}; do
$showcolor $(( red*36 + green*6 + blue + 16 )) $green
done
echo -n " "
done
echo
done
echo
done
echo 24 grayscale color codes:
for row in {0..1}; do
for col in {0..11}; do
$showcolor $(( row*12 + col + 232 )) $row
done
echo
done
echo
}
function _showcolor256_fg() {
local code=$( printf %03d $1 )
echo -ne "\033[38;5;${code}m"
echo -nE " $code "
echo -ne "\033[0m"
}
function _showcolor256_bg() {
if (( $2 % 2 == 0 )); then
echo -ne "\033[1;37m"
else
echo -ne "\033[0;30m"
fi
local code=$( printf %03d $1 )
echo -ne "\033[48;5;${code}m"
echo -nE " $code "
echo -ne "\033[0m"
}
16种颜色
由bash/zsh脚本生成:
function showcolors16() {
_showcolor "\033[0;30m" "\033[1;30m" "\033[40m" "\033[100m"
_showcolor "\033[0;31m" "\033[1;31m" "\033[41m" "\033[101m"
_showcolor "\033[0;32m" "\033[1;32m" "\033[42m" "\033[102m"
_showcolor "\033[0;33m" "\033[1;33m" "\033[43m" "\033[103m"
_showcolor "\033[0;34m" "\033[1;34m" "\033[44m" "\033[104m"
_showcolor "\033[0;35m" "\033[1;35m" "\033[45m" "\033[105m"
_showcolor "\033[0;36m" "\033[1;36m" "\033[46m" "\033[106m"
_showcolor "\033[0;37m" "\033[1;37m" "\033[47m" "\033[107m"
}
function _showcolor() {
for code in $@; do
echo -ne "$code"
echo -nE " $code"
echo -ne " \033[0m "
done
echo
}
其他回答
要显示具有不同颜色的消息输出,可以执行以下操作:
echo -e "\033[31;1mYour Message\033[0m"
-黑色0;30深灰色1;30-红色0;31浅红色1;31-绿色0;32浅绿色1;32-棕色/橙色0;33黄色1;33-蓝色0;34浅蓝色1;34-紫色0;35浅紫色1;35-青色0;36浅青色1;36-浅灰色0;37白色1;37
这些代码在我的Ubuntu盒子上运行:
echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"
这将以不同的颜色打印字母a、b、c、d:
echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"
对于循环:
for (( i = 0; i < 17; i++ ));
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)";
done
使用tput计算颜色代码。避免使用ANSI转义码(例如,\e[31;1m表示红色),因为它不易移植。例如,OS X上的Bash不支持它。
BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`
BOLD=`tput bold`
RESET=`tput sgr0`
echo -e "hello ${RED}some red text${RESET} world"
我写了swag就是为了实现这一点。
你可以这样做
pip install swag
现在,您可以通过以下方式将所有转义命令作为txt文件安装到给定目标:
swag install -d <colorsdir>
或者更容易通过:
swag install
这将把颜色安装到~/.colors。
您可以这样使用它们:
echo $(cat ~/.colors/blue.txt) This will be blue
或者这样,我觉得更有趣:
swag print -c red -t underline "I will turn red and be underlined"
在ascinema上查看!
我应该使用tput,而不是硬编码特定于当前终端的转义码。
这是我最喜欢的演示脚本:
#!/bin/bash
tput init
end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
eval "$(printf "tput setaf %3s " "$c")"; echo -n "$_"
[[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
[[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done
tput init