Wenn Sie git verwenden, scheint es auf magische Art und Weise zu wissen, ob Standard out durch eine Pipe geht oder in eine Datei vs, wenn es auf der Konsole angezeigt wird. Zum Beispiel, wenn Sie Farben aktiviert haben und Sie tun
%Vor%wird die Ausgabe für verschiedene Kategorien von Dateien farbig darstellen. Allerdings, wenn Sie
tun %Vor%oder
%Vor%Es entfernt die Linux-Farbformatierung und Sie sehen nur einfachen, ungefärbten Text .
Wie erkennt git
, ob die Ausgabe seiner Befehle zur Datei geht oder zum Terminal geht?
isatty(int fd)
prüft, ob sich das fd auf ein Terminal oder etwas anderes bezieht. Es ist Teil von unistd.h
in der GNU C-Bibliothek.
Man-Seite: Ссылка
Ganz nebenbei: Wenn Sie von einem Programm lesen möchten, das ein anderes Programm verwendet, aber Sie möchten isatty
dazu bringen, zu denken, dass Ihr Programm ein Mensch ist, dann gibt es einen Weg, dies zu tun. Sie können ein Pseudo-Terminal (pty) verwenden. Diese Technik wird beispielsweise von expect verwendet.
Kann bestätigen, dass git davon abhängt:
%Vor%Läuft gegen den Quellcode-Baum.
Beachten Sie, dass fds 0 = stdin, 1 = stdout, 2 = stderr standardmäßig ist, aber diese können natürlich umgeleitet oder geschlossen werden (normalerweise schließen Sie Ihre Dateideskriptoren, wenn Sie ein Daemon sind, und öffnen die anderen wieder) will).
Tags und Links linux terminal xterm gnome-terminal konsole