带有shell脚本的着色终端

时间:2014-08-30 20:18:23

标签: linux shell terminal

有人可以解释为什么当我在终端中复制并粘贴以下命令时,它会正确地显示彩色测试,但是当我通过sh myscript.sh运行它时,它不显示彩色文本?

blue='\e[1;34m'
NC='\e[0m'

echo -e "${blue}Test${NC}"

修改

Sudo不是问题。如果我复制上面并直接粘贴到终端,一切正常。如果你运行文件,sh myscript.sh无效

2 个答案:

答案 0 :(得分:1)

可能是因为您的系统sh不是bash

$ file /bin/sh
/bin/sh: symbolic link to `dash'

尝试

bash myscript.sh

答案 1 :(得分:1)

您的交互式shell似乎是GNU Bash,而sh是一个通用的POSIX shell,实际上可能是dashbusybox sh或其他东西。问题是,-eecho的{​​{1}}选项都不符合POSIX标准。

但您可以轻松使用\e代替printf(不要忘记明确指定换行符echo -e)和\n而不是\033:< / p>

\e

或者,当然,如果您确定它可以在目标系统上使用,您可以使用blue='\033[1;34m' NC='\033[0m' printf "${blue}%s${NC}\n" 'Test' (如Elliott Frisch建议的那样)。


另外我应该指出,你所做的并不是运行shell脚本的正确方法。如果您正在编写独立脚本,那么最好使用hashbang并将执行位设置为file。

bash

但是如果您正在为交互式shell编写命令序列(如果愿意的话,还有宏),那么$ cat myscript #!/bin/sh blue='\033[1;34m' NC='\033[0m' printf "${blue}%s${NC}\n" 'Test' $ chmod +x myscript $ ./myscript (或简称source)命令:

.

(那么关于POSIX兼容性的所有上述内容当然无关紧要。)