脚本和命令中带有颜色选项的Echo命令的工作方式不同


15

如果我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

他们为什么表现不同?

Answers:


29

echo是Bash和dash(/bin/sh)中内置的shell 。如果从命令行运行echo,则使用的是Bash内置函数;如果要运行Shell脚本,sh则使用的是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"

有用。/bin/echo用dash(/bin/sh)和bash; echobash或./tes.sh两者均正常工作。以下代码bash仅适用于。如果[$ UID -ne 0]; 然后回显“不是root用户”,否则回显“ root用户” fi
qingfeng

1

不要使用来运行它sh test.sh,它会像您说的那样以白色打印文本。创建脚本后,通过运行使其可执行,

sudo chmod +x /path/test.sh

在此处输入图片说明

使用sudo,like sudo ./test.sh./test.sh两者都可以运行脚本。

要么

使用运行脚本bash

bash /path/test.sh

我运行chmod a+x test.sh,它以读取颜色打印文本。有什么区别。./test.sh应该等于sh test.shlinux发生了什么?
庆丰2014年

您不必在运行脚本时使用sh,而是使用bash解释器创建了脚本,#! /bin/bash因此您必须使用bash test.sh
Avinash Raj

并且也.表示当前目录。
Avinash Raj

看截图,我的test.sh文件放在桌面上。所以我移到该桌面文件夹,然后运行./test.sh,最后它成功了。请记住.只有当脚本出现在当前目录中时,才运行该脚本。
Avinash Raj

1

这需要所有格式正确的命令。

正确的echo语句: echo "Hello World!"

正确的带有颜色的echo语句: echo "\e[1;31mHello World!\e[0m"

为bash脚本添加颜色是那些非常简单但容易造成混淆的事情之一。=)

该站点可以帮助您清楚地解释所有内容。我经常将其用作参考,因为谁能正确记住所有正确的颜色代码?大声笑

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.