Jessaye de rediriger stderr vers stdout puis vers un fichier dans un script init, mais quand jintroduis stderr vers stdout, jobtiens lerreur « Redirection de sortie ambiguë ». Stdout seul nentraîne pas lerreur et écrit dans le fichier journal où jai indiqué. Jai essayé ce qui suit

-jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar &>/jbeaulau_test/microservices/log/all.log & -jar /jbeaulau_test/microservices/config-server-0.0.2-RELEASE.jar >/jbeaulau_test/microservices/log/all.log 2>&1 & 

Tout conseil serait apprécié.

Commentaires

Answer

Si vous « exécutez (t) csh, vous obtenez Ambiguous output redirect. si vous essayez de configurer deux redirections en conflit:

> echo foo > a > b Ambiguous output redirect. 

Dans Bash, vous pourriez obtenir une erreur similaire si vous utilisez un tableau avec plusieurs éléments à la place du nom de fichier:

$ set aa bb $ echo foo > "$@" bash: "$@": ambiguous redirect 

Comme mentionné dans les réponses à la redirection stderr ne fonctionne pas dans csh , lopérateur >& fonctionne dans (t) csh pour rediriger à la fois stdout et stderr. 2>&1 est le moyen standard de rediriger stderr vers le même endroit que stdout, mais (t) csh ne prend pas en charge cela. À la place, il prend la combinaison > foo 2>&1 comme redirection vers foo, un argument normal 2 et une redirection vers 1, et les redirections sont en conflit, vous obtenez donc lerreur.

>& fonctionne également dans Bash et zsh, mais ce nest pas une fonctionnalité standard.

Réponse

La deuxième entrée devrait fonctionner correctement. Lerreur « redirection ambiguë » se produit parfois si vous avez des espaces là où ils ne devraient pas être, ou inversement quand un espace important manque.

Je simplifierais votre commande pour démontrer:

echo "Test" >/tmp/x.txt 2>&1 & 

La partie « > /tmp/x.txt » redirigera stdout (descripteur de fichier # 1). Un espace entre le> et le nom du fichier est autorisé (bien que dans ce contexte serait déroutant), mais sinon il ne devrait y avoir aucun espace ici.

Le 2> & 1 redirigera stderr (descripteur de fichier 2) vers nimporte quel fichier la poignée 1 va à (qui est stdout). Il ne doit pas non plus y avoir despaces ici.

Le & sera larrière-plan de votre tâche. Cela doit être décalé avec un espace à partir du caractère précédent.

Inverser les deux redirections ne fonctionne pas (bien que lécho soit un mauvais choix ici car il ne produit pas de sortie stderr):

echo "This will not work" 2>&1 >/tmp/x.txt & 

Cela signifie:

2>&1 

Redirige le descripteur de fichier 2 vers où va le descripteur de fichier 1 (qui à ce stade est toujours la console)

>/tmp/x.txt 

Redirige le descripteur de fichier 1 vers un fichier – mais depuis le descripteur de fichier 2 (stderr) est déjà redirigé à ce stade, il conservera sa destination et ira toujours à la console.

La première commande que vous avez écrite est simplement une erreur de syntaxe.

echo &>/tmp/x.txt 

Mise à jour : @Wildcard a souligné dans les commentaires quil sagit en fait dune syntaxe valide.

Commentaires

  • The ">/tmp/x.txt" part will redirect stdout (file handle #1). It must not contain any spaces.. Il peut contenir de lespace. command >out.txt == command > out.txt
  • Vous avez raison; Jai fait une erreur là-bas. Correction du problème.
  • " La première commande que vous avez écrite est simplement une erreur de syntaxe. " Non, cest ' nest pas; il ' est la syntaxe Bash préférée pour rediriger à la fois stdout et stderr. Voir LESS='+/Redirecting Standard Output and Standard Error' man bash
  • @Wildcard – merci. Je narrête jamais dapprendre!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *