全部。
我有以下示例代码:
#!/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/bash
she-bang,但您正在将脚本运行为sh the-script
,因此sh
将其解释为 ,而不是bash
。
在大多数系统上,默认情况下,bash
内置函数echo
不会扩展序列。仅当启用\x
该选项或使用该选项时才会执行此操作(除非和选项均已启用)。xpg_echo
-e
xpg_echo
posix
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'