Soy un novato en el script de bash, y aquí está básicamente mi script de bash:
Z=`diff -Z $ref_out $exec_out | grep "[<>]" | wc -l` 2>/dev/null
if [ $Z -gt 0 ]; then
echo "*** testcase: [ stdout - FAILED ]"
else
echo "*** testcase: [ stdout - PASSED ]"
fi
Me gustaría suprimir el mensaje de error de diff como:
diff: No such file or directory
Esto podría ser resultado de ningún archivo $ ref_out o $ exec_out, aunque estoy redirigiendo a / dev / null, este mensaje de error aún aparece. ¿Alguna ayuda?
Respuestas
3 para la respuesta № 1Necesitas diff
"s stderr para ir a / dev / null, por lo que debería ser:
Z=`diff -Z $ref_out $exec_out 2> /dev/null | grep "[<>]" | wc -l`
0 para la respuesta № 2
Su redirección no funciona porque se está aplicando al shell principal, no al subshell que ejecuta la canalización.
Si desea enviar el stderr de un grupo de comandos a / dev / null, puede hacerlo de esta manera: estoy usando $()
en lugar de comillas traseras:
Z=$( { diff -Z $ref_out $exec_out | grep "[<>]" | wc -l; } 2>/dev/null )
Aquí, 2>/dev/null
se aplica a todos los comandos dentro { }
.
Hay muchos problemas en su código. Podrías reescribirlo de una mejor manera:
if diff -Z "$ref_out" "$exec_out" 2>/dev/null | grep -q "[<>]"; then
echo "*** testcase: [ stdout - FAILED ]"
else
echo "*** testcase: [ stdout - PASSED ]"
fi
grep -q
es una mejor manera de hacer esta verificación y no necesitará unwc -l
a menos que quieras saber el número exacto de coincidencias- necesitas citar tus variables
if
la declaración puede incluir comandos; no necesita capturar el resultado para usarlo en la instrucción if
Puedes usar chequeo para validar su script de shell y ver si está cometiendo los errores habituales que pueden romper su código.