web-dev-qa-db-fra.com

La redirection de la sortie de la commande vers une variable en bash échoue

J'essaie de rediriger la sortie de la commande vers une variable:

OUTPUT=$(Sudo Apache2ctl configtest)

et ensuite le lire:

echo $OUTPUT

Lors de son exécution, la sortie est la suivante:

19:19:12 user@user ~ OUTPUT=$(Sudo Apache2ctl configtest)
Syntax OK
Syntax OK

Mais la variable reste vide. J'ai essayé la même chose pour d'autres commandes et tout fonctionne bien. 

OUTPUT=$(ls -l)

Ceci écrit la liste de fichiers dans la variable OUTPUT afin qu’elle puisse être lue plus tard. Que dois-je faire pour que cela fonctionne?

15
roman

peut-être que la sortie va à stderr, pas stdout?

essayez ceci: OUTPUT=$(Sudo Apache2ctl configtest 2>&1)

34
johnshen64

Pour nginx, il peut arriver que configtest réussisse avec une erreur dans les fichiers de configuration. Exemple: 

nginx: [warn] conflicting server name "test.com" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

pour des erreurs de vérification correctes dans les scripts bash, il faut utiliser:

if [[ $((Sudo /sbin/service nginx configtest) 2>&1 | grep "failed\|warn" ) ]]; then
    echo "ERROR!!!"
else
    echo "OK!!!"
fi
0
beliy