Utilizo un Makefile (con GNU make corriendo bajo Linux) para automatizar mi trabajo de grunt al refacturar un script de Python. La secuencia de comandos crea un archivo de salida y quiero asegurarme de que el archivo de salida permanezca sin cambios frente a mis refactorizaciones.Códigos de estado del shell en make
Sin embargo, no encontré ninguna forma de obtener el código de estado de un comando para afectar un shell posterior si el comando.
La regla siguiente ilustra el problema:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
La primera 'diff' compara dos archivos iguales, y el segundo se comparan dos archivos diferentes. La salida es:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Así que, obviamente '$$!' es la variable incorrecta para capturar el código de estado de 'diff'. Incluso usando SHELL: =/bin/bash al comienzo del Makefile no resolvió el problema.
Una variable que devuelve el valor, que necesito, se usaría (si es que existe) en un comando 'if' en la regla real.
La alternativa de crear un pequeño script de shell ad-hoc en lugar de escribir todos los comandos en línea en el Makefile no es deseable, pero lo usaré como último recurso.
relacionadas:
no puedo encontrar nada de '' $$ en el enlace que ya ha proporcionado!. Puede ser más específico modificando el URL y dando el que apunta directamente 'a la cuarta respuesta de Exit Shell Script Basado en Process Exit Code' usando el enlace' share' debajo de la 4ta respuesta si todavía está en el 4to posición – SebMa