ls 系统命令不显示终端颜色

ls 系统命令不显示终端颜色

我刚刚摆弄了一些 C 语言代码,一个非常基本的程序示例如下,它显然只是使用 ls 系统命令列出目录。

#include <stdio.h>

int main (void) {
    system("ls -l -d */");
    printf("I've just listed the directories :-)\n");
    return 0;
}

这运行良好,但它以单色显示 ls 输出,而 Bash 会使用目录的颜色输出列表(如果我包含文件,则使用文件的颜色)。我怎样才能让我的 C 代码使用 bash 颜色?谢谢

答案1

ls默认别名为:ls --color=auto因此当ls在支持颜色的终端中时,它会使用颜色代码。

在 bash 会话中不会发生调用system(),因此不会评估您的别名。我也不确定自动检测会发生什么,所以我会通过热连命令使其强制彩色输出:

system("ls --color=always -l -d */");

我已经测试过了并且它有效。--color=auto也有效并且可能更安全。

这种现象甚至可能不存在于 Csystem()调用中。我经历过watch与其他人有类似的问题。运行watch ls -l后您将看不到颜色。还解释了为什么--colour=auto它并不总是有效。

相关内容