Bash imprimer stderr seulement, pas stdout [dupliquer]
Cette question a déjà une réponse ici:
- comment canaliser stderr, et non stdout? 10 réponses
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)
3 réponses
Il suffit D'envoyer le stdout à null:
cmd > /dev/null
Cela conserve stderr, mais supprime stdout.
, 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.
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"