Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sh和bash中输出彩色文本_Bash_Colors_Sh - Fatal编程技术网

在sh和bash中输出彩色文本

在sh和bash中输出彩色文本,bash,colors,sh,Bash,Colors,Sh,我通常使用: YELLOW=$(tput setaf 3) 在bash中实现所需的效果,但我现在必须重写脚本以在Unix平台上用sh运行。因此,我正在寻找一个在sh和bash中都能工作的解决方案 谢谢一个解决方案是将您的脚本建立在通用脚本的基础上,而不是依赖于tput。而不是生成这些序列,你可以。然而,这可能会给不支持这些序列的哑终端带来问题 例如: YELLOW="(ESC)[33m" NORMAL="(ESC)[0m" echo "${YELLOW}Yellow text.${NORMA

我通常使用:

YELLOW=$(tput setaf 3)
在bash中实现所需的效果,但我现在必须重写脚本以在Unix平台上用sh运行。因此,我正在寻找一个在sh和bash中都能工作的解决方案


谢谢

一个解决方案是将您的脚本建立在通用脚本的基础上,而不是依赖于
tput
。而不是生成这些序列,你可以。然而,这可能会给不支持这些序列的哑终端带来问题

例如:

YELLOW="(ESC)[33m"
NORMAL="(ESC)[0m"

echo "${YELLOW}Yellow text.${NORMAL}"

(ESC)
表示文字转义字符。你应该换一个真的。旧的shell不支持
$'\x'
语法,但是您可以直接分配转义字符。

该行在任何符合POSIX的shell中都可以正常工作。您遇到的确切错误是什么?没有错误,只是没有颜色变化。您需要提供更多信息。您发布的这一行代码是完全有效的POSIX代码,因此您的脚本的其他部分可能不正确,或者您遇到了与您正在使用的shell无关的终端问题。我使用putty通过SSH连接到Unix盒。使用相同的方法登录到Linux机箱也可以正常工作。如果在linux框中发出此命令而不加引号,则终端颜色将按预期更改为黄色“tput setaf 3”。如果我在Unix框中尝试相同的操作(同样是在命令提示符下),则没有结果。这消除了脚本,以及我访问框的方式,但没有潜在的shell。Unix box(Well NanoBSD)是一个pfSense设备,默认shell是/bin/shtput,可能是NanoBSD中没有包含的东西?您能举个例子吗?@Atomiklan请参阅更新。您可以通过执行
printf“\e”>temp\u file
然后使用编辑器打开文件并从中复制字符来获取转义字符。它显然不喜欢这样。下面是直接剪切粘贴示例的输出:(ESC)[33mYellow text.(ESC)[0m@Atomiklan就像我说的,你需要在那里放一个真正的逃生木炭。哦,哇,对不起,错过了