2012-04-25 18 views
13

próbuję przekierować dane wyjściowe polecenia do zmiennej:Przekierowanie wyjścia polecenia do zmiennej w bashu nie

OUTPUT=$(sudo apache2ctl configtest) 

a następnie ją przeczytać:

echo $OUTPUT 

Uruchamiając go wyjście jest następujące:

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

Ale zmienna pozostaje pusta. Próbowałem tego samego dla innych poleceń i wszystko działa dobrze.

OUTPUT=$(ls -l) 

To pisze listy plików do zmiennej OUTPUT tak, że można go przeczytać później. Co powinienem zrobić, aby działało?

+0

Zwykle przyczyną jest z konieczności przestrzeń pomiędzy wyjściem i = to nie jest prawdziwe w Twoim przypadku? – ControlAltDel

Odpowiedz

27

może wynik idzie do stderr, a nie stdout?

spróbuj tego: OUTPUT=$(sudo apache2ctl configtest 2>&1)

+0

Osobiście znajduję nieco bardziej objaśniającą odpowiedź http://stackoverflow.com/a/3130425/1504300 – reallynice

0

Dla nginx możliwej sytuacji gdy configtest może być udany z powodu błędu w plikach konfiguracyjnych. Przykład:

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 

dla poprawnych błędów kontrolnych w skryptach bash trzeba użyć:

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