【问题标题】:coloring terminal with shell script使用 shell 脚本着色终端
【发布时间】:2014-08-30 20:18:23
【问题描述】:

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

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

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

编辑

Sudo 不是问题。如果我复制上面的内容并直接粘贴到终端中,一切正常。如果你通过文件运行,sh myscript.sh 不起作用

【问题讨论】:

  • 如果sh myscript.sh 有效但sudo sh myscript.sh 无效,则root 的终端设置可能与您帐户的终端设置不同。
  • Sudo 不是问题。如果我复制上面的内容并直接粘贴到终端中,一切正常。如果你通过文件运行,sh myscript.sh 不起作用

标签: linux shell terminal


【解决方案1】:

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

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

试试

bash myscript.sh

【讨论】:

  • 感谢您的帮助。
【解决方案2】:

您的交互式 shell 似乎是 GNU Bash,而 sh 是通用 POSIX shell,实际上可能是 dashbusybox sh 或其他东西。问题是echo\e-e 选项都不符合POSIX。

但您可以轻松地使用printf 代替echo -e(不要忘记明确指定换行符\n)和\033 代替\e

blue='\033[1;34m'
NC='\033[0m'
printf "${blue}%s${NC}\n" 'Test'

或者,当然,如果您确定目标系统上可以使用 bash(正如 Elliott Frisch 建议的那样),您也可以使用它。


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

$ cat myscript
#!/bin/sh

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

printf "${blue}%s${NC}\n" 'Test'

$ chmod +x myscript
$ ./myscript

但是,如果您正在为交互式 shell 编写命令序列(如果您愿意,可以使用宏),则有 source(或简称为 .)命令:

$ source myscript

(那么上面关于 POSIX 合规性的所有内容当然都没有关系。)

【讨论】:

  • 一个非常主观的答案并且没有回答问题 - 使用 #!/bin/sh 的操作会遇到同样的问题。
  • @isedev 在我看来,我写得很清楚#!/bin/bash 不是#!/bin/sh,不是吗?
  • 是的,但是您回答的主要重点是使用#!source 而不是(shell) script...恕我直言,这与该问题无关。
  • @isedev 好的,我已经重写了答案。现在好点了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2017-12-03
  • 2012-11-21
  • 2011-01-20
  • 2013-04-07
  • 2012-04-04
相关资源
最近更新 更多