Comment rediriger uniquement stderr?

13

J'ai un peu de mal à faire ça. Je dois exécuter un fichier .java compilé et rediriger uniquement stderr vers un fichier appelé error. Le fichier .java est donc nommé javaProgram.java.

Voici ce que j'ai essayé:

java javaProgram 2> error

Mais quand je

cat error

il semble qu'il y ait des choses là-dedans, même si je sais pertinemment que le fichier .java spécifique ne contient aucune erreur. Est-ce que je fais quelque chose de mal? Tout ce que je veux que ce fichier d'erreur affiche, ce sont des erreurs, pas autre chose.

John
la source

Réponses:

16

Votre premier essai était correct; 2>filenameest la façon dont vous redirigez stderr. Il se peut que votre programme écrive des non-erreurs dans stderr ou que le programme java exécute d'autres programmes qui sortent vers stderr.

Mark Plotnick
la source
1

La réponse simple est que ce n'est pas possible. L'erreur standard est utilisée pour écrire la sortie de diagnostic et c'est aux applications de définir ce qu'est la sortie de diagnostic / d'erreur. C'est selon la norme POSIX .

Jeight
la source
2
Si vous allez citer la spécification POSIX, veuillez citer une section spécifique et non le document entier. C'est énorme.
jordanm
Depuis quand n'est-il pas possible de rediriger stderr vers un fichier en POSIX? Vous devrez fournir un devis réel pour cela.
l0b0
1
@ l0b0 ce n'est pas ce que Jeight dit. C'est aux applications de décider ce qui va à STDOUT et ce qui va à STDERR; il serait tout à fait possible de tout mettre dans STDOUT, par exemple, puis rediriger STDERR n'aurait aucun effet. Ou, comme dans ce cas, il est possible (et la pratique standard) de mettre certaines choses qui ne sont pas strictement des erreurs dans STDERR. La seule façon dont il serait possible d'analyser les erreurs d'autres diagnostics serait si les erreurs sont marquées avec 'ERREUR:' ou quelque chose. Il peut y avoir un changement de verbosité qui pourrait aider, mais cela est spécifique au programme.
evilsoup
OP a posé deux problèmes sémantiquement différents: "rediriger uniquement stderr vers un fichier appelé erreur" et "Je veux que ce fichier d'erreur affiche des erreurs, pas autre chose". La première partie de cela n'est certainement pas impossible, c'est mon point.
l0b0
@ l0b0 Vous l'avez à l'envers. L'OP peut définitivement rediriger le stderr vers un fichier appelé error. Il ne peut pas choisir ce que Java sort en tant que stderr car le contenu de stderr est contrôlé par l'application et non par l'utilisateur. Ce qu'il peut faire, c'est grep le fichier auquel stderr a été transmis pour les messages d'erreur réels.
Jeight