¿La 'instalación' de Homebrew advierte un error?


0

Al usar el brew install foo comando con foo devoluciones ya instaladas

Warning: foo-3.5.2 already installed

¿Es esto técnicamente un error, como stderr, o es este mensaje simplemente stdout? No se especifica en la documentación. Lo pregunto porque tengo un guión que dice:

#!/bin/bash
brew install foo
if [ $? -eq 0 ]; then
    echo OK
else
    echo FAIL
fi

(Es un script simple que me ayuda a aprender condicionales de if-then: ¡no juzgues!) Cada vez que lo ejecuto, el script regresa OK en conjunción con lo anterior Warning. Esto sugeriría que la advertencia no es un error / falla, ¿verdad?


Solo un pensamiento. No estoy muy seguro de en qué versión de Mac OS X está, pero si lo compruebo bash -version desde la línea de comandos en Mac OS X 10.9.5, obtengo la versión devuelta de 3.2.53. Y eso parece algo conectado a la 3.5.2 en su línea de advertencia.
JakeGould

Respuestas:


1

Eso suena como una advertencia impresa por la aplicación de preparación, pero Bash no es consciente de un error. Si Bash lo ve como un error depende de si la aplicación lo envía a la secuencia de error o la secuencia de salida, y cuál es el código de salida. Dado que su secuencia de comandos obtiene un OK, bash cree que el comando está devolviendo 0, lo que significa que el comando bash se ejecutó correctamente. Por lo tanto, brew debe enviar advertencias de este tipo a stdout, en lugar de stderr.

¿Sabe cómo usar 2 & gt; Cómo redirigir stderr a un archivo? Podría redireccionar stderr (2) y stdout mientras ejecuta su script a dos archivos diferentes. A continuación, puede ver en qué secuencia se imprime la advertencia.

./script.sh > stdout.txt 2> stderr.txt

Excelente, gracias! La advertencia de Brew es, de hecho, un error que Homebrew re-dirige a stdout? Esencialmente, Homebrew está engañando a Bash para que piense que todo es Hunky-Dory, y esto se debe a que a Bash le importa si el comando fue aprobado con éxito, ¿correcto? ¿A Bash no le importa el valor de verdad, solo la validez lógica?
grad student

Depende de cómo se escribió la aplicación: los escritores de brew podrían haber elegido hacerla salir con un código distinto a cero para que bash, para que bash supiera que había un error. Al parecer, tienen que salir de 0 (código de éxito), y luego imprimir el error de elaboración. Si escribe un script de bash, puede insertar directivas de salida en diferentes puntos y configurar códigos de salida (cualquier número que desee, realmente). Luego, debes documentar qué código significa qué error. Por ejemplo, tar sale con 0 si es perfectamente exitoso, 1 si algunos archivos difieren, o 2 por un error fatal. Los códigos de salida también se pueden llamar un valor de retorno o un estado.
jdelaporte
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.