相关疑难解决方法(0)

出现时,Linux终端中的颜色特定字

我在终端中运行了一堆脚本(我没有能力编辑它们),这些脚本将消息输出到终端.我希望我的终端能够自动为输出中的特定单词着色.

例如,某些脚本FAIL在测试失败时输出.如何配置终端,使其在任何时候显示为特定颜色(例如,红色).

linux terminal colors

15
推荐指数
1
解决办法
9109
查看次数

有色grep?

有时,在查找内容行为时,着色日志文件或其他内容可以提供良好的概述

我刚看到grep有着色功能

grep -C 99999 --color <regexp> <filename>
Run Code Online (Sandbox Code Playgroud)

还有哪些其他方法?

unix debugging logging command-line grep

11
推荐指数
2
解决办法
6626
查看次数

Color Linux命令输出

例如,我想为locate命令的输出着色,以便与其他终端文本轻松区分.

它应该是这样的:

locate -bir pdf | some_command_to_color_the_result
Run Code Online (Sandbox Code Playgroud)

着色不应仅限于locate命令:我需要一个通用的解决方案,使用管道为文本着色,例如将其输出为grepcat.

如果没有内置的Linux命令,那么有关如何创建一个Linux命令的任何提示都会受到赞赏.

linux bash

10
推荐指数
4
解决办法
2万
查看次数

ROS_INFO_STREAM 不打印

我正在尝试在一个复杂的 try...catch 中使用 ROS_INFO_STREAM 但我只有顶级输出

这是一个最小的代码:

void failure()
{
    try
    {
      // throw std::length_error
      std::string("abc").substr(10);                    
    }
    catch (...)
    {
      ROS_ERROR_STREAM("ROS failure()");          // print OK
      std::cout << "cout failure()" << std::endl; // print OK
      throw; // re-throw the exception
    }
}


int main()
{
  try
  {
    ROS_ERROR_STREAM("ROS calling"); // print OK
    failure(); // will throw
  }
  catch (...)
  {
    ROS_ERROR_STREAM("ROS call function"); // <-- NO print
    std::cout << "cout call function" << std::endl; // print OK
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出: …

c++ ros

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

检测`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
查看次数

确保程序位于终端中

我试图为一些必须使用 ansi 转义代码在终端中显示的字符串添加颜色。到目前为止,我还没有掌握整个 ascii 转义代码的事情,只是通过复制粘贴一些转义代码来尝试。然后看到这个答案,要求验证程序应该检查它是否在终端中执行,否则继续而不用转义码污染字符串?

答案解释了使用基于 *nix 的函数isatty(),我发现该函数驻留在其中,根据我的理解,它并不是由 cpp 标准unistd.h提升到的。我尝试再次搜索SO,但没有不太能理解。现在我对此有两个问题:cunistd

  • 在什么环境(正确的词?)下,使用 ascii 转义码的程序可以执行它需要初始检查?因为我只为 cli 构建。
  • 根据 ISO cpp 标准,处理此问题的正确解决方案是什么?使用unistd.h?这会限制现代 cpp 实践吗?

在处理 ansi/颜色相关的事情之前,还有什么我应该阅读/理解的吗?

c++ linux terminal

4
推荐指数
1
解决办法
241
查看次数

如何为boost :: log console输出添加颜色编码?

我正在尝试为linux下的boost :: log添加彩色日志输出.我读了以下内容,并尝试了这个:

#define MY_LOG_ERROR() BOOST_LOG_TRIVIAL(error) << "\033[1;31"

MY_LOG_ERROR() << "This is an error log."
Run Code Online (Sandbox Code Playgroud)

但它给了我以下结果:

[2016-07-11 17:23:16.328435] [0x00007f15f03d6780] [错误] [1; 31这是一个错误日志.

如何正确添加彩色日志输出到boost :: log?

c++ logging boost boost-logging boost-log

4
推荐指数
1
解决办法
3043
查看次数

ZSH 将彩色数组对象打印到终端窗口

仍在学习 shell 脚本和 ZSH。但想知道是否有人知道如何创建一个简单对象数组,即 json 类型对象/哈希,然后以不同颜色的列格式打印每个对象的属性。

我想在我的 zsh 插件中创建一个特定的函数,以非常精确的方式打印到我的终端。

开放式问题:

1.) 如何用不同的颜色打印特定的字符串

2.) 如何定义具有多个键/值对的基本对象数组

下面的伪代码有望阐明我想要做什么。

function display-collection() {
  collection=(
    {param1: foo1, param2: bar1, param3: baz1 }
    {param1: foo2, param2: bar2, param3: baz2 }
    {param1: foo3, param2: bar3, param3: baz3 }
    {param1: foo4, param2: bar4, param3: baz4 }
    {param1: foo5, param2: bar5, param3: baz5 }
    {param1: foo6, param2: bar6, param3: baz6 }
  )
  print -l $collection
}
Run Code Online (Sandbox Code Playgroud)

使上述函数将内容以彩色方式吐出到终端

foo1 (RED TEXT) bar1 (DEFAULT COLOR) baz1 (YELLOW COLOR)
foo2 (RED TEXT) bar2 …
Run Code Online (Sandbox Code Playgroud)

arrays shell zsh colors

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

标签 统计

c++ ×4

linux ×3

terminal ×3

colors ×2

logging ×2

arrays ×1

bash ×1

boost ×1

boost-log ×1

boost-logging ×1

command-line ×1

debugging ×1

grep ×1

ros ×1

shell ×1

unix ×1

xcode ×1

zsh ×1