2012-04-25 14 views
13

estoy tratando de redirigir la salida del comando a una variable:Redirigir la salida del comando a una variable en bash no

OUTPUT=$(sudo apache2ctl configtest) 

y después de leerlo:

echo $OUTPUT 

cuando se ejecuta la salida se el siguiente:

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

Pero la variable permanece en blanco. He intentado lo mismo para otros comandos y todo funciona bien.

OUTPUT=$(ls -l) 

Esto escribe la lista de archivos a la variable OUTPUT para que pueda ser leído más tarde. ¿Qué debo hacer para que funcione?

+0

La causa habitual es de tener un espacio entre la salida y = esto no es cierto en su caso? – ControlAltDel

Respuesta

27

puede que la salida va a stderr, no stdout?

probar esto: OUTPUT=$(sudo apache2ctl configtest 2>&1)

+0

Personalmente, me resulta un poco más explicativo la respuesta http://stackoverflow.com/a/3130425/1504300 – reallynice

0

Para la situación nginx posible cuando configtest puede tener éxito con error en los archivos de configuración. Ejemplo:

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 

de errores de comprobación correctas en los scripts de bash uso de la necesidad:

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