【问题标题】:Output of C++ function system(command) does not show color in Linux terminalC++ 函数系统(命令)的输出在 Linux 终端中不显示颜色
【发布时间】:2013-12-16 08:55:21
【问题描述】:

当我在我的 Linux 终端中直接运行命令时,说“ls”,输出是带颜色的。但是,当我运行调用 system("ls") 的 C++ 程序时,输出没有颜色。

有没有办法让后一种方式也显示彩色输出?

谢谢!

【问题讨论】:

  • 你为什么要做system("ls");

标签: c++ linux terminal stdout


【解决方案1】:

为什么没有颜色的答案在于here

system() 通过调用 /bin/sh -c 执行 command 中指定的命令 命令,并在命令完成后返回。

sh -c 忽略别名。也许在某个地方你有一个别名,其中ls 表示ls --color=auto

例如,如果我使用sh -c 'ls',我将没有颜色。

证明:

wow ♪[01:04 AM][vnbraun@chernobyl ~]$ which ls
alias ls='ls --color=auto'
        /bin/ls
wow ♪[01:08 AM][vnbraun@chernobyl ~]$ sh -c 'which ls'
/bin/ls

因此,你可以试试system("ls --color=auto");

【讨论】:

    【解决方案2】:

    你可以跑

     system("/bin/ls --color=auto");
    

    但我认为你真的不应该在你的 C++ 程序中运行ls。也许您想使用-readdir(3)stat(2)nftw(3)glob(3)wordexp(3) 等的组合......

    我认为分叉一个运行 /bin/ls 的 shell 对 C++ 程序没有用处。有更简单的方法可以实现您的目标(我猜不出来)。

    您可能应该阅读Advanced Linux Programming

    【讨论】:

      【解决方案3】:

      尝试调用ls --color=autols --color=always 以显示带有颜色的ls

      【讨论】:

        【解决方案4】:

        这可能是由于系统中某处的 bash 配置文件将“ls”别名为“ls --color”。

        在您的程序中使用“ls --color”应该可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-25
          • 1970-01-01
          • 2017-06-20
          • 2021-12-07
          • 1970-01-01
          • 2011-06-05
          • 2022-10-15
          相关资源
          最近更新 更多