通过 ssh 运行脚本时,echo 的颜色代码不起作用

通过 ssh 运行脚本时,echo 的颜色代码不起作用

全部。

我有以下示例代码:

#!/bin/bash
echo "[\033[01;32m  green  \033[01;37m]"
echo "[\033[01;31m  red  \033[01;37m]"

当我在本地运行此脚本时,我得到了正确的输出颜色。

但是如果我通过 scp 复制到另一台主机并使用“ssh”运行它[电子邮件受保护]"sudo sh color-test.sh"" 该脚本将打印代码而不是颜色。

远程运行脚本时应该有什么注意事项吗?

答案1

的行为

echo '\033'

取决于实施和/或环境。

对于 UNIX 兼容的实现,它输出一个 ESC 字符,后跟 NL,在其他一些实现中,它输出\033后跟 NL。有些支持扩展-e这些转义序列的选项。\033

您的脚本有一个#! /bin/bashshe-bang,但您正在将脚本运行为sh the-script,因此sh将其解释为 ,而不是bash

在大多数系统上,默认情况下,bash内置函数echo不会扩展序列。仅当启用\x该选项或使用该选项时才会执行此操作(除非和选项均已启用)。xpg_echo-expg_echoposix

sh在这方面,您的本地实现可能是符合 UNIX 标准的(例如dash,或bash使用默认启用的选项进行编译xpg_echo),但远程服务器上的实现不是(例如bash)。

如果您想要便携且可靠的行为,改用printf:

printf '[\33[01;32m  green  \33[01;37m]\n'
printf '[\33[01;31m  red  \33[01;37m]\n'

相关内容