【发布时间】:2013-12-16 08:55:21
【问题描述】:
当我在我的 Linux 终端中直接运行命令时,说“ls”,输出是带颜色的。但是,当我运行调用 system("ls") 的 C++ 程序时,输出没有颜色。
有没有办法让后一种方式也显示彩色输出?
谢谢!
【问题讨论】:
-
你为什么要做
system("ls");?
当我在我的 Linux 终端中直接运行命令时,说“ls”,输出是带颜色的。但是,当我运行调用 system("ls") 的 C++ 程序时,输出没有颜色。
有没有办法让后一种方式也显示彩色输出?
谢谢!
【问题讨论】:
system("ls");?
为什么没有颜色的答案在于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");。
【讨论】:
你可以跑
system("/bin/ls --color=auto");
但我认为你真的不应该在你的 C++ 程序中运行ls。也许您想使用-readdir(3)、stat(2)、nftw(3)、glob(3)、wordexp(3) 等的组合......
我认为分叉一个运行 /bin/ls 的 shell 对 C++ 程序没有用处。有更简单的方法可以实现您的目标(我猜不出来)。
您可能应该阅读Advanced Linux Programming
【讨论】:
尝试调用ls --color=auto 或ls --color=always 以显示带有颜色的ls。
【讨论】:
这可能是由于系统中某处的 bash 配置文件将“ls”别名为“ls --color”。
在您的程序中使用“ls --color”应该可以工作。
【讨论】: