我在终端中运行了一堆脚本(我没有能力编辑它们),这些脚本将消息输出到终端.我希望我的终端能够自动为输出中的特定单词着色.
例如,某些脚本FAIL在测试失败时输出.如何配置终端,使其在任何时候显示为特定颜色(例如,红色).
有时,在查找内容和行为时,着色日志文件或其他内容可以提供良好的概述
我刚看到grep有着色功能
grep -C 99999 --color <regexp> <filename>
Run Code Online (Sandbox Code Playgroud)
还有哪些其他方法?
例如,我想为locate命令的输出着色,以便与其他终端文本轻松区分.
它应该是这样的:
locate -bir pdf | some_command_to_color_the_result
Run Code Online (Sandbox Code Playgroud)
着色不应仅限于locate命令:我需要一个通用的解决方案,使用管道为文本着色,例如将其输出为grep或cat.
如果没有内置的Linux命令,那么有关如何创建一个Linux命令的任何提示都会受到赞赏.
我正在尝试在一个复杂的 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)
输出: …
还有另一种方法,而不是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的输出:
我试图为一些必须使用 ansi 转义代码在终端中显示的字符串添加颜色。到目前为止,我还没有掌握整个 ascii 转义代码的事情,只是通过复制粘贴一些转义代码来尝试。然后看到这个答案,要求验证程序应该检查它是否在终端中执行,否则继续而不用转义码污染字符串?
答案解释了使用基于 *nix 的函数isatty(),我发现该函数驻留在其中,根据我的理解,它并不是由 cpp 标准unistd.h提升到的。我尝试再次搜索SO,但没有不太能理解。现在我对此有两个问题:cunistd
unistd.h?这会限制现代 cpp 实践吗?在处理 ansi/颜色相关的事情之前,还有什么我应该阅读/理解的吗?
我正在尝试为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?
仍在学习 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)