2010-06-29 8 views
30

Estoy haciendo un Makefile que mueve un archivo de salida (foo.o) a un directorio diferente (baz).¿Cómo ignorar el error mv?

El archivo de salida se mueve según lo deseado al directorio. Sin embargo, como make no volverá a compilar el archivo de salida si escribo make nuevamente, mv recibe un error cuando intenta mover el archivo vacío inexistente al directorio baz.

Así que esto es lo que he definido en mi regla make all después de todo compilación:

-test -e "foo.o" || mv -f foo.o ../baz 

Por desgracia, todavía estoy recibiendo errores.

+1

Mira lo que hizo altendky: -mv foo.o ../baz – Malcolm

Respuesta

9
[email protected][ -d $(dir [email protected]) ] || mkdir -p $(dir [email protected]) 

es lo que utilizo para crear una carpeta en silencio si no existe. Para su problema de algo como esto debería funcionar

[email protected][ -e "foo.o" ] && mv -f foo.o ../baz 
+0

sigo teniendo un error ignorado cuando se utiliza esto, pero era la mejor solución hasta aquí. gracias – Sam

+0

sí, todavía obtendrá el error de ignorar silencio de make, con el que no estoy de acuerdo ya que @ debería hacerlo completamente silencioso. – Charles

+0

@ no afecta a la salida de make del comando, solo le dice a make que no se imprima la invocación en sí. – JesperE

1
-test -e "foo.o" || if [ -f foo.o ]; then mv -f foo.o ../baz; fi; 

que debería funcionar

0

Algo así como

test -e "foo.o" && mv -f foo.o ../baz 

debería funcionar: el operador debe haber && en lugar de ||.

se puede experimentar con esto tratando estos comandos:

test -e testfile && echo "going to move the file" 
test -e testfile || echo "going to move the file" 
27

noto en realidad nadie ha respondido a la pregunta original en sí, sin embargo, específicamente cómo ignorar errores (todas las respuestas están preocupados actualmente sólo con llamar al comando si no causará un error).

Ignorar realidad errores, sólo tiene que hacer:

mv -f foo.o ../baz 2>/dev/null; true 

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

+3

Esta es una buena idea.Por supuesto, alguien también podría descartar la parte "verdadera" y usar "-" si querían ver algún resultado sobre el archivo perdido. –

99

Errors in Recipes (de TFM)

para ignorar los errores en una línea de recetas, escribir una - al comienzo del texto de la línea (después de la pestaña inicial).

Así que el objetivo sería algo así como:

moveit: 
    -mv foo.o ../baz 
Cuestiones relacionadas