2008-11-25 6 views
10

J'essaye de rediriger la sortie du compilateur java vers un fichier. Je pensais qu'il est censé être:essayant de capturer la sortie javac dans bash shell

javac file.java > log.txt 

ou quelque chose. Au lieu de cela, je vois toute la sortie sur le terminal et rien dans le fichier log.txt!

Aussi, si je veux enregistrer les erreurs aussi, dois-je faire

javac file.java 2>&1 > log.txt 

?

Répondre

13
javac file.java 2> log.txt 

La raison est que vous avez deux descripteurs de fichier de sortie au lieu d'un. L'habituel est stdout, que vous pouvez rediriger avec> et il est supposé être utilisé pour la sortie résultante. Le second, stderr, est destiné à une sortie lisible par l'homme comme les avertissements, les erreurs, le statut actuel, etc., celui-ci est redirigé avec 2>.

Votre deuxième ligne, en utilisant 2> & 1, redirige stderr vers stdout et enfin stdout dans log.txt.

+0

Je vois rediriger stderr me donne la sortie que je veux. Pourquoi tout est-il connecté dans stderr et rien dans stdout? Aussi, pourriez-vous me dire pourquoi javac file.java 2> & 1> log.txt ne fonctionne pas? – jcee14

+0

Les redirections sont gérées de gauche à droite. Le 2> & 1 envoie stderr à l'endroit où stdout va actuellement - le terminal. Ensuite, le fichier> log.txt envoie stdout à log.txt, en laissant stderr en train d'écrire dans stdout d'origine. Si vous avez écrit> log.txt 2> & 1, toutes les sorties iront au fichier. –

+0

Vous obtenez des points bonus si vous saviez que cela fonctionne aussi:> log.txt javac 2> & 1 file.java –

7

Avez-vous essayé

javac -Xstdout log.txt file.java 

Cela envoie des erreurs du compilateur dans un fichier journal au lieu de stderr.

Questions connexes