Wie die meisten Linux-Profis wissen, wir die farbige Darstellung über Escape-Sequenzen gesteuert.
Wen ich aber
Code: Alles auswählen
ls >> test.txt
Wie wird dies intern bei ls gelöst, so das es erkannt, ob die Ausgabe auf die Konsole oder in eine Datei ist.
Nehme ich als Beispiel die fpc-Konsolen GUI, sieht man gut, das dies dort nicht abgefangen wird.
Wen ich folgendes mache
Code: Alles auswählen
fp >> test.txt
Code: Alles auswählen
[H[?12l[?25h[?12;25h[?1049h[?12l[?25h(B)0[0m[H[2J[0;40;37m[?7l[1;1H[90;47m
[0;40;37m[?7l[2;1H[34;47m░░░░░░░░░░░░░░░░
Code: Alles auswählen
uses
Unix;
var
f: Text;
s: string;
i: integer = 1;
begin
popen(f, 'ls /home/tux', 'R');
while not EOF(f) do begin
ReadLn(f, s);
WriteLn(i: 4, ': ', s);
Inc(i);
end;
PClose(f);
end.
Aber bei der Datei-Umlenkung, nützt auch --color nichts.
Wie kann ich selbst ermitteln, wen ich eine Konsolenanwendung schreibe, wohin die Daten mit WriteLn gehen, so wie es ls auch macht ?