Quiero probar si hay algún resultado del diff
(prueba si los archivos son iguales), si no hay ninguno echo "Passed $x" else echo "Failed $x"
. Se me ocurrió algún paso intermedio (guarde la salida de diff en un archivo y luego lea el archivo)
diff "./helloworld$x.out" "./output/helloworld$x.out" > tmp.txt;
output="`cat tmp.txt`";
if [ "$output" = "" ];
then
echo "Passed $x";
else
echo "Failed $x";
fi;
¿Estoy seguro de que el código se puede mejorar? La pregunta principal es: ¿es posible guardar la salida diff
directamente en una variable?
... > /dev/null
hace en este contexto. La salida de diff irá a goto / dev / null pero ¿no es eso nada?diff
incluso puede suprimir la salida por completo, excepto el mensaje "Archivos / bin / bash y / bin / sh diferente" utilizando el código a continuación.Si incluso desea ocultar ese mensaje, debe agregar
> /dev/null
después del comando diff para ocultar la salida dediff
:/dev/null
es un archivo especial que actúa como un agujero negro, si lo escribe, desaparecerá, si está leyendo, no recibirá nada.Tenga en cuenta que bash no necesita
;
terminar líneas.En cuanto a la pregunta original, para guardar la salida de un programa en una variable:
Formas alternativas de verificar si una variable está vacía:
Si está utilizando Bash, se recomiendan los dos últimos comandos para la comparación de cadenas. De lo contrario, el primero y
[ -n "$output" ]
se recomienda.fuente
a) La salida del comando1 puede capturarse con
o con backticks, pero se desaconsejan, porque no puedes anidarlos y puede ser difícil distinguirlos de los apóstrofos, dependiendo de la fuente:
b) En lugar de escribir en un archivo, y luego leer ese archivo, (o tomar la salida y luego hacer eco) usaría una tubería directamente:
=>
pero en su ejemplo, no está interesado en el resultado, sino en el resultado del programa: ¿funcionó?
Para leer sobre el uso de && y || busque "acceso directo AND y acceso directo OR".
Para mantener la salida limpia, puede redirigir la salida de 'diff' a ninguna parte:
Para obtener el éxito y evaluarlo más tarde, almacena el resultado del último comando en una variable con $ ?:
fuente
Si desea saber si dos archivos son iguales o diferentes (pero no importa cuál sea la diferencia en realidad),
cmp
es más adecuado.fuente