2010-05-15 3 views
14

J'exécute une tâche sur la CLI, ce qui me demande une entrée oui/non. Après la sélection d'un choix, une grande quantité d'informations défile sur l'écran - y compris plusieurs erreurs. Je veux diriger cette sortie vers un fichier afin que je puisse voir les erreurs. Un simple '>' ne fonctionne pas puisque la commande attend une entrée au clavier.Comment acheminer la sortie d'une commande vers un fichier sous Linux

Je cours sous Ubuntu 9.1.

+0

Quel est le nom de la commande en cours d'exécution? faire? – Cristina

Répondre

1

Utilisez 2> plutôt que simplement >.

1

Si le programme a été écrit par une personne saine d'esprit, ce que vous voulez probablement, c'est le stderr et non le stdout. Vous y parvenir en utilisant quelque chose comme

foo 2> errors.txt

37
command &> output.txt 

Vous pouvez utiliser &> pour rediriger la fois stdout et stderr vers un fichier. Ceci est un raccourci pour command > output.txt 2>&1 où le 2>&1 signifie "envoyer stderr au même endroit que stdout" (stdout est le descripteur de fichier 1, stderr est 2).

Pour les commandes interactives habitude, je ne prends pas la peine d'enregistrement dans un fichier si je peux utiliser less et lire les résultats tout de suite:

command 2>&1 | less 
+1

Rediriger à la fois stdout et stderr vers un fichier signifie qu'il ne verra pas l'invite réelle. Je ne vois pas comment il se porterait mieux que la situation qu'il décrit dans sa question. – Epcylon

+0

Vous avez utilisé '&' des deux côtés des nombres ('1',' 2'). L'utilisation de '& 2' ou' 2 & ', même' 2 &> 1' ou '2> & 1' fait-elle une différence? –

+0

@FredrickGauss Oups! J'ai eu une faute de frappe dans ma réponse. '2 &> 1' n'est pas valide. Je voulais écrire '2> & 1'. –

4
echo yes | command > output.txt 

Selon la façon dont la commande le lit est entrée (certains programmes rejeter tout ce qui était sur stdin avant qu'il ne soit affiché, mais la plupart ne le font pas), cela devrait fonctionner sur n'importe quel environnement CLI sain.

+1

Je pense que vous voulez dire 'echo oui | command' plutôt que 'command <\' echo yes \ ''. (Il y a aussi la commande 'yes' qui pourrait être utile.) –

+0

Vous avez raison.J'ai commencé à penser qu'il pouvait mettre son entrée dans un fichier, et j'ai changé d'idée en utilisant simplement echo à la place, mais j'ai oublié de changer la ligne de commande pour la faire correspondre. Le fixe maintenant. – Epcylon

+0

Cela reformate le json je voulais écrire un fichier malheureusement. – metanerd

1

Vous pouvez utiliser l'option 2> pour envoyer des erreurs au fichier.

exemple:

commande 2> error.txt

(utilisation de l'option 2>) --- voir si leur serait une erreur alors que l'exécution de la commande, il enverra au fichier error.txt.

Questions connexes