it-swarm.com.de

Das Umleiten der Befehlsausgabe auf eine Variable in Bash schlägt fehl

Ich versuche, die Befehlsausgabe auf eine Variable umzuleiten:

OUTPUT=$(Sudo Apache2ctl configtest)

und dann zu lesen:

echo $OUTPUT

Beim Ausführen ist die Ausgabe die folgende:

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 ausprobiert und alles funktioniert gut. 

OUTPUT=$(ls -l)

Dadurch wird die Dateiliste in die Variable OUTPUT geschrieben, damit sie später gelesen werden kann. Was muss ich tun, damit es funktioniert?

15
roman

vielleicht geht die Ausgabe nach stderr, nicht nach stdout?

versuchen Sie dies: OUTPUT=$(Sudo Apache2ctl configtest 2>&1)

34
johnshen64

Bei nginx kann die Situation, in der configtest erfolgreich ist, mit einem Fehler in Konfigurationsdateien erfolgreich sein. 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 korrekte Überprüfungsfehler in Bash-Skripts müssen Sie Folgendes verwenden:

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