有人可以解释为什么当我在终端中复制并粘贴以下命令时,它会正确地显示彩色测试,但是当我通过sh myscript.sh
运行它时,它不显示彩色文本?
blue='\e[1;34m'
NC='\e[0m'
echo -e "${blue}Test${NC}"
修改
Sudo不是问题。如果我复制上面并直接粘贴到终端,一切正常。如果你运行文件,sh myscript.sh无效
答案 0 :(得分:1)
可能是因为您的系统sh
不是bash
。
$ file /bin/sh
/bin/sh: symbolic link to `dash'
尝试
bash myscript.sh
答案 1 :(得分:1)
您的交互式shell似乎是GNU Bash,而sh
是一个通用的POSIX shell,实际上可能是dash
,busybox sh
或其他东西。问题是,-e
和echo
的{{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兼容性的所有上述内容当然无关紧要。)