如果我echo -e "\e[1;31mThis is red text\e[0m"
在命令行中运行,它会打印出红色文本。
但是如果我使用在脚本文件中写入test.sh
#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"
跑步$ sh test.sh
它打印出来
-e \e[1;31mThis is red text\e[0m
他们为何表现不同?
答案1
echo
是 Bash 和 dash ( ) 中的内置 shell /bin/sh
。如果您echo
从命令行运行,则使用内置 Bash;如果您使用 运行 shell 脚本,则sh
使用内置 Dash。
dash 版本echo
不知道-e
选项,只是逐字输出任何内容,而没有对\
序列进行任何特殊处理。
使用 Bash 运行你的 shell 脚本,或者/bin/echo
使用echo
:
/bin/echo -e "\e[1;31mThis is red text\e[0m"
为了避免不同版本的问题,echo
您可能希望改用printf
。与echo
printf
始终解释序列相反,但不会在末尾自动添加换行符,因此如果需要,\
您必须在末尾附加换行符。\n
由于某些版本printf
不理解,\e
您应该使用\033
:
printf "\033[1;31mThis is red text\033[0m\n"
答案2
这需要正确的命令和正确的格式。
正确的 echo 语句:echo "Hello World!"
带颜色的正确回显语句:echo "\e[1;31mHello World!\e[0m"
为 Bash 脚本添加颜色是非常简单但容易混淆的事情之一。=)
本网站可以帮你清楚地解释这一切。我经常用它作为参考,因为谁能记住所有正确的颜色代码呢?哈哈
答案3
不要用它运行sh test.sh
,它会像你说的那样以白色打印文本。创建脚本后,通过运行使其可执行,
sudo chmod +x /path/test.sh
sudo
使用、likesudo ./test.sh
或both运行脚本./test.sh
即可。
或者
使用 运行脚本bash
,
bash /path/test.sh