2012-04-25 18 views
13

Ich versuche Befehlsausgabe in eine Variable umzuleiten:Umleiten Befehlsausgabe in eine Variable in bash nicht

OUTPUT=$(sudo apache2ctl configtest) 

und dann zu lesen:

echo $OUTPUT 

Wenn es die Ausgabe läuft Folgendes:

19:19:12 [email protected] ~ OUTPUT=$(sudo apache2ctl configtest) 
Syntax OK 
Syntax OK 

Die Variable bleibt jedoch leer. Ich habe das gleiche für andere Befehle versucht und alles funktioniert gut.

OUTPUT=$(ls -l) 

Dies schreibt Dateiliste Variable OUTPUT, so dass sie später gelesen werden können. Was soll ich tun, damit es funktioniert?

+0

Die übliche Ursache ist ein Raum zwischen OUTPUT von und mit = Dies ist in Ihrem Fall nicht wahr? – ControlAltDel

Antwort

27

vielleicht geht der Ausgang zu stderr, nicht stdout?

versuchen Sie dies: OUTPUT=$(sudo apache2ctl configtest 2>&1)

+0

Ich persönlich finde ein bisschen mehr Erklärung der Antwort http://StackOverflow.com/A/3130425/1504300 – reallynice

0

Für nginx mögliche Situation, wenn configtest mit Fehlern in Konfigurationsdateien erfolgreich sein kann. Beispiel:

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 

für die korrekte Überprüfung Fehler in Bash-Skripte verwenden müssen:

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