web-dev-qa-db-fra.com

Comment ignorer l'erreur mv?

Je crée un Makefile qui déplace un fichier de sortie (foo.o) vers un répertoire différent (baz).

Le fichier de sortie se déplace comme souhaité dans le répertoire. Cependant, puisque make ne recompilera pas le fichier de sortie si je tape à nouveau make, mv obtient une erreur lorsqu'il essaie de déplacer le fichier vide inexistant vers le répertoire baz .

Voici donc ce que j'ai défini dans ma règle make all après toute compilation:

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

Malheureusement, je reçois toujours des erreurs.

32
Sam
+@[ -d $(dir $@) ] || mkdir -p $(dir $@)

est ce que j'utilise pour créer silencieusement un dossier s'il n'existe pas. Pour votre problème, quelque chose comme ça devrait fonctionner

-@[ -e "foo.o" ] && mv -f foo.o ../baz
10
Charles

Erreurs dans les recettes (de TFM)

Pour ignorer les erreurs dans une ligne de recette, écrivez un - au début du texte de la ligne (après l'onglet initial).

Donc, la cible serait quelque chose comme:

moveit:
    -mv foo.o ../baz
103
altendky

Je remarque que personne n'a encore répondu à la question d'origine elle-même, en particulier comment ignorer les erreurs (toutes les réponses concernent actuellement uniquement l'appel de la commande si elle ne provoque pas d'erreur).

Pour ignorer réellement les erreurs, vous pouvez simplement faire:

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

Cela redirigera la sortie de stderr vers null et suivra la commande avec true (qui renvoie toujours 0, faisant croire à la commande que la commande a réussi indépendamment de ce qui s'est réellement passé), permettant au flux de programme de continuer.

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

Cela devrait fonctionner

1
Corey Farwell

Quelque chose comme

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

devrait fonctionner: l'opérateur doit être && au lieu de ||.

Vous pouvez expérimenter cela en essayant ces commandes:

test -e testfile && echo "going to move the file"
test -e testfile || echo "going to move the file"
0
Richard Fearn