2010-04-19 6 views
55

El comando $ make all da errores como rm: cannot remove '.lambda': No such file or directory por lo que se detiene. Quiero que ignore los errores rm-not-found-errors. ¿Cómo puedo forzar?Marca: ¿cómo continuar después de que falla un comando?

Makefile

all: 
     make clean 
     make .lambda 
     make .lambda_t 
     make .activity 
     make .activity_t_lambda 
clean: 
     rm .lambda .lambda_t .activity .activity_t_lambda 

.lambda: 
     awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda 

.lambda_t: 
     paste .lambda t_year > .lambda_t 

.activity: 
     awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity 

.activity_t_lambda: 
     paste .activity t_year .lambda | sed -e '[email protected]\[email protected]\t\&\[email protected]' -e '[email protected][email protected]\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex 

Respuesta

112

Pruebe la bandera -i (o --ignore-errors). The documentation parece sugerir una forma más sólida para lograr esto, por cierto:

para ignorar los errores en una línea de comandos, escribir una - al comienzo del texto de la línea (después de la pestaña inicial). El - se descarta antes de pasar el comando al shell para su ejecución.

Por ejemplo,

clean: 
    -rm -f *.o 

Esto hace rm a continuar incluso si no es capaz de eliminar un archivo.

Todos los ejemplos son con rm, pero son aplicables a cualquier otro comando que necesita para ignorar los errores de (es decir mkdir).

+9

+1 - el tablero de ataque es lo que parece realmente quiere. –

+13

¡No * hagas * eso! No debes ignorar los errores.Simplemente agregue el indicador -f a rm y ya no fallará cuando trate de eliminar archivos que no existen. Sin embargo, seguirá regresando y producirá un error si realmente no puede eliminar un archivo. Ese es el comportamiento que quieres, ¡falla cuando hay un problema! –

+3

@Kristof Provost estuvo de acuerdo. 'rm -f' es mejor para el problema específico que tiene el usuario, pero aún así es bueno saber sobre la solución general, incluso si a veces es insegura. –

18

Cambio limpia para

rm -f .lambda .lambda_t .activity .activity_t_lambda 

es decir, no solicite eliminar; no se queje si el archivo no existe

2

Cambiar la clean por lo rm no se quejará:

clean: 
    rm -f .lambda .lambda_t .activity .activity_t_lambda 
19

make -k (o --keep-going en gnumake) hará lo que usted está pidiendo, creo.

Realmente debe encontrar la línea del o rm que está fallando y agregarle un -f para evitar que ocurra ese error a otros.

+0

¿Un voto negativo sin comentarios? De buen tono. –

+1

No quería decir nada, pero me preguntaba qué pensaban ellos también. Si hay alguna razón por la que no veo por qué esa bandera no sería apropiada, sería bueno que aparezca. –

+1

No debe ignorar los errores. La solución propuesta por Brian, Oded y NebuSoft es correcta. Esta y la respuesta aceptada son incorrectas. –

-1

Ponga una opción -f en su comando rm.

rm -f .lambda .lambda_t .activity .activity_t_lambda 
+0

El '-' en la respuesta aceptada funciona para todos los comandos –

8

Para conseguir hacer pasar por alto los errores de hecho en una sola línea, puede simplemente sufijo con ; true, estableciendo el valor de retorno a 0. Por ejemplo:

rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true 

Esto redirigir la salida a stderr null, y siga el comando con true (que siempre devuelve 0, lo que hace creer que el comando tuvo éxito, independientemente de lo que realmente sucedió), permitiendo que el flujo del programa continúe.

+0

Gracias por descargar el texto de error. –

+1

Esto funciona para mí donde el guión inicial no (me dan un archivo MAKE para ejecutar una prueba que debe fallar, y analizaré los registros más tarde) –

2

de retorno con éxito mediante el bloqueo de rm 's returnCode detrás de un tubo con el comando true, que siempre devuelve 0 (éxito)

rm file | true 
Cuestiones relacionadas