相关疑难解决方法(0)

检测shell脚本的输出流类型

我正在编写一个在命令行上使用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脚本中检测输出是否被重定向或管道传输?

unix linux shell scripting

14
推荐指数
2
解决办法
4926
查看次数

检测`cout`是否输出到正确接受颜色的终端?

还有另一种方法,而不是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的输出:

在此输入图像描述

c++ terminal xcode

5
推荐指数
1
解决办法
405
查看次数

标签 统计

c++ ×1

linux ×1

scripting ×1

shell ×1

terminal ×1

unix ×1

xcode ×1