Bash imprimer stderr seulement, pas stdout [dupliquer]

Cette question a déjà une réponse ici:

Je veux pelucher un fichier et imprimer le stderr (message d'erreur), mais ne pas imprimer le stdout (en disant que le fichier est OK).

php -l "foo/bar.php"
  • S'il n'y a pas d'erreurs, il affiche un message "Aucune erreur" sur stdout.
  • S'il y a des erreurs, il imprime un message détaillé à stderr. Je ne veux que celui-ci.

Je pense que ce sera de la magie avec >&, mais je n'ai jamais compris comment cela fonctionne.

Ce que je veux, c'est consommer tout stdout, garder stderr.

(désolé si c'est dulicate, mais je n'ai trouvé aucune question exactement à ce sujet)

23
demandé sur MightyPork 2014-08-15 21:29:07

3 réponses

Il suffit D'envoyer le stdout à null:

cmd > /dev/null

Cela conserve stderr, mais supprime stdout.

41
répondu nneonneo 2014-08-15 17:30:48

, Vous pouvez utiliser:

php -l "foo/bar.php" 2>&1 > /dev/null

C'est-à-dire rediriger stderr vers stdout et stdout vers /dev/null afin d'obtenir uniquement stderr sur votre terminal.

2
répondu anubhava 2014-08-15 17:33:34

S'il n'y a pas d'erreurs, il affiche un message "Aucune erreur" sur stdout. S'il y a des erreurs, il imprime un message détaillé à stderr. Je ne veux que celui-ci.

Cela affichera le message d'erreur si un est envoyé ou {[1] } s'il est vide.

ERROR=$(exec php -l "foo/bar.php" 2>&1 >/dev/null)
[[ -z $ERROR ]] && ERROR='No error.'
echo "$ERROR"
0
répondu konsolebox 2014-08-15 17:35:31