9
votes

À Linux, comment puis-je vérifier si la sortie d'un programme va à un terminal en direct ou à un fichier?

Lorsque vous utilisez Git Il semble savoir par magie si la standard est en cours un tuyau ou dans un fichier vs lorsqu'il est affiché sur la console. Par exemple, si vous avez des couleurs activées et que vous faites xxx

il colorisera la sortie pour différentes catégories de fichiers répertoriés. Cependant, si vous faites xxx

ou xxx

il supprime le Mise en forme de couleur Linux et vous ne voyez que du texte simple et non coloré.

Comment GIT Détectez si la sortie de ses commandes va au fichier vs aller sur le terminal?


3 commentaires

Je ne pense pas que cela devrait être sur superutilisateur, car l'OP est vraiment recherché, c'est comment le programme est-il. Git détecte où il est redirigé ou non.


Je suis d'accord avec @ tommieb75 C'est une question API, pas une question d'administration.


Au fait, si vous n'étiez pas simplement curieux, et que vous demandiez cela parce que vous vouliez avoir une sortie colorée et Sortie pagaie de git, vous pouvez gérer avec GIT CONFIG Paramètres Comme core.pager (moins) et couleur.pager (vrai). Kernel.org/pub/software/scm/git/ docs / git-config.html


4 Réponses :


14
votes

isatty (int fd) vérifiera si la FD se réfère à un terminal ou à quelque chose d'autre. Cela fait partie de unisd.h dans la bibliothèque GNU C.

Homme Page: http://linux.die.net/man/3/isatty < / a>

En bar: Si vous souhaitez lire à partir d'un programme à l'aide d'un autre programme, mais que vous souhaitez tromper Isatty en pensant que votre programme est un humain, il existe un moyen de le faire. Vous pouvez utiliser un pseudo-terminal (PTY). Cette technique est utilisée par Attendez-vous , par exemple.


0 commentaires

8
votes

Ceci est un code C pour démontrer comment détecter si la sortie standard est redirigée: xxx

C'est ainsi que GIT sait si la sortie va sur le terminal ou à un fichier.


0 commentaires

3
votes

peut confirmer que c'est ce que GIT s'appuie sur: xxx

exécutez contre l'arborescence source GIT.

Notez que FDS 0 = stdin, 1 = stdout, 2 = stdout, 2 = stdout Par défaut, mais ceux-ci peuvent bien sûr être ré-dirigés ou fermés (généralement si vous êtes un démon, vous fermez vos descripteurs de fichiers et re-ouvrez ceux que vous souhaitez).


0 commentaires

3
votes

à partir d'un script shell, utilisez l'indicateur de test code> code> sur le descripteur de fichier 0 (entrée standard).

Exemples: P>

# Any Bourne-style shell
[ -t 0 ] && echo This is a terminal

# Modern interactive shells: ksh, bash, zsh
[[ -t 0 ]] && echo This is a terminal


0 commentaires