Может подтвердить, что git полагается на:
$ grep -ir "isatty" ./*
./builtin-commit.c: if (isatty(0))
./builtin-config.c: stdout_is_tty = isatty(1);
./builtin-pack-objects.c: progress = isatty(2);
./builtin-prune-packed.c: int opts = isatty(2) ? VERBOSE : 0;
./builtin-revert.c: if (isatty(0))
./builtin-shortlog.c: if (!nongit && !rev.pending.nr && isatty(0))
./builtin-unpack-objects.c: quiet = !isatty(2);
./color.c: stdout_is_tty = isatty(1);
./compat/winansi.c: if (!isatty(fileno(stream)))
./compat/winansi.c: if (!isatty(fileno(stream)))
./pack-redundant.c: if (!isatty(0)) {
./pager.c: if (!isatty(1))
./pager.c: if (isatty(2))
./remote-curl.c: options.progress = !!isatty(2);
./transport.c: args.no_progress = args.quiet || (!transport->progress && !isatty(1));
./transport-helper.c: int no_progress = v < 0 || (!t->progress && !isatty(1));
./wt-status.c: * will have checked isatty on stdout).
Запустить дерево исходников git.
Обратите внимание, что fds 0 = stdin, 1 = stdout, 2 = stderr по умолчанию, но, конечно, их можно перенаправить или закрыть (обычно, если вы демон, вы закрываете свои файловые дескрипторы и заново открываете те, которые хотите).