我正在编写一个在命令行上使用ANSI颜色字符的shell脚本.
示例:example.sh
#!/bin/tcsh
printf "\033[31m Success Color is awesome!\033[0m"
Run Code Online (Sandbox Code Playgroud)
我的问题在于:
$ ./example.sh > out
Run Code Online (Sandbox Code Playgroud)
要么
$./example.sh | grep
Run Code Online (Sandbox Code Playgroud)
ASCII码将与文本一起原始发送,使输出混乱并且通常导致混乱.
我很想知道是否有办法检测到这一点,所以我可以禁用这种特殊情况的颜色.
我已经在tcsh手册页和网页上搜索了一段时间,但还没有找到任何特定于shell的内容.
我不一定要tcsh,这是我们的团队标准......但是谁在乎呢?
是否可以在shell脚本中检测输出是否被重定向或管道传输?
还有另一种方法,而不是isatty知道cout输出到正确接受颜色的终端吗?
我正在使用此标头的颜色,我已经if(isatty(1))用来知道输出是否转到终端.
不幸的是,当我向Xcode的控制台输出颜色时,我获得了未转义的序列 - 但是当它从OS中的Terminal.app或iTerm执行应用程序时它可以正常工作.
我想Xcode的控制台将自己标识为终端,但仍然忽略了颜色序列......
所以我希望有更好的检测 - 如果可能的话.
我的代码本身很简单,就像这样,返回一个彩色字符串if if isatty为true,然后它转到cout:
std::string Slot::description()
{
if(isatty(1))
{
return FBLU("my_string");
}
else
{
return "my_string";
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode的输出:
iTerm的输出: