如果程序使用 exec 运行,则没有颜色输出

Posted

技术标签:

【中文标题】如果程序使用 exec 运行,则没有颜色输出【英文标题】:No colour output if program run with exec 【发布时间】:2015-05-09 09:41:26 【问题描述】:

我有一个可以运行的 C 程序

execvp("grep", args);

其中 args 是一个数组 "grep", "test"(test 是我希望 grep 找到的单词)。 问题是 grep 的输出没有着色。在普通的 bash shell 中,grep 以红色突出显示 test,但在我的程序输出中,它只打印如下行 this is a test 没有任何突出显示或任何颜色。

我还使用 execvp 来执行一些其他命令,这些命令也会在 bash shell 中产生彩色输出,并且在我的输出中没有颜色。

有没有办法解决这个问题?我需要对stdout 做些什么?

【问题讨论】:

【参考方案1】:

您需要为grep 提供正确的选项才能使其着色。您的 shell 环境很可能包括:

alias grep='grep --color=auto'

但是execvp 对别名一无所知。

所以创建 args 数组:"grep", "--color=auto", "test", 0 并在您的 execvp("grep", args); 调用中使用它。

【讨论】:

以上是关于如果程序使用 exec 运行,则没有颜色输出的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中运行 exec 时出现 error.code 139

运行时的 exec() 方法不重定向输出

为啥我的 exec 命令失败但如果命令在终端中传递则可以工作?

如果范围没有填充颜色,则显示错误

CommandLineParser - 如果没有给出开关,则显示 --help 结果

将 exec 输出重定向到缓冲区或文件