4 votes

Comment récupérer tout ce que le shell affiche?

Nous concevons un shell dans le navigateur qui diffusera tout ce que le shell produit. stdout, stderr, tout.

cependant, tout comme le petit exemple que nous vous montrons,

git clone https://github.com/joyent/node.git >./git.out 
cat ./git.out

la plupart de la sortie n'est pas donnée à ./git.out. Voici une petite vidéo, si vous voulez voir ce qui se passe http://screencast.com/t/7zTdPfq7Pr7

Nous avons besoin que des commandes comme 'top', 'git' fonctionnent, des idées sur la façon de les obtenir ?

(la sortie dans un fichier est uniquement à des fins d'illustration, nous diffuserons chaque ligne de sortie vers un autre système, nous savons que pour top cela n'aurait pas de sens mais j'espère que mon point est suffisamment clair pour ceux qui peuvent fournir des conseils. merci.)

10voto

Chris Eberle Points 285

La plupart des programmes ont deux sorties : stdout et stderr. stdout est l'endroit où vont les informations "principales". stderr est utilisé pour, eh bien, les erreurs. Il est également utilisé pour diverses sorties non importantes, ainsi que parfois pour des invites utilisateur.

Pour tout capturer, vous devez rediriger stderr vers stdout.

somecmd arg1 arg2 arg3 >somefile 2>&1

Ou pour capturer stderr dans un fichier séparé :

somecmd arg1 arg2 arg3 >stdout.txt 2>stderr.txt

Sachez qu'il EST possible pour un programme d'utiliser d'autres sorties que stdout / stderr. Il peut déterminer votre console et "forcer" essentiellement la sortie. Cependant, c'est extrêmement rare, et ce qui précède fonctionnera dans 99% des situations.

Une chose à garder à l'esprit si vous redirigez à la fois stdout et stderr vers le même fichier est que stdout et stderr se mettent en mémoire tampon différemment, donc cela ne ressemblera pas de la même manière dans un fichier journal que sur l'écran (les lignes seront désordonnées). De plus, dans votre cas spécifique, votre sortie va ressembler à des déchets. git fait beaucoup de manipulation de terminal (pour l'indicateur de progression) et dans un fichier journal, cela va paraître assez terrible.

EDIT

De man git-clone:

--progress
Le statut de progression est rapporté sur le flux d'erreurs standard par défaut lorsqu'il est attaché à un terminal, sauf si -q est spécifié. Ce drapeau force le statut de progression même si le flux d'erreurs standard n'est pas dirigé vers un terminal

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X