为什么此处执行的ls
输出没有着色?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <pty.h>
#include <sys/wait.h>
int main(int argc, char **argv ) {
termios termp; winsize winp;
int amaster; char name[128];
if (forkpty(&amaster, name, &termp, &winp) == 0) {
system("ls"); // "ls --color" will work here!
return 0;
}
wait(0);
char buf[128]; int size;
while (1) {
size = read(amaster, buf, 127);
if (size <= 0) break;
buf[size] = 0;
printf("%s", buf);
}
return 0;
}
根据man
(以及我正在检查的ls.c
),如果isatty()
返回true,则应该着色。 forkpty()
之后一定是真的。此外,在此示例中,ls
DOES 以列化模式输出!这意味着它感觉它有tty
作为输出。
当然我不希望只有ls
输出颜色,而是一个任意程序,感觉它后面有真正的颜色tty
。
我刚写了一个简单的测试:
#include <unistd.h>
int main() {
printf("%i%i%i%i%i\n", isatty(0), isatty(1), isatty(2), isatty(3), isatty(4));
}
并在forkpty
的子部分中调用它,并显示11100
,这意味着ls
应该是彩色的!
好的,因为似乎ls
没有产生颜色输出的事实与forkpty()
无关。它默认情况下不启用颜色。但是现在,也许这是另一个问题,如果它只是检查isatty()
,为什么它不是颜色?