Exécution de plusieurs exécutions rsync dans un script

1

J'essaie d'exécuter plusieurs commandes rsync à partir d'un script bash, mais seul le premier se déclenche. J'ai essayé de relier les commandes avec &&et ;mais ni l'un ni l'autre ne fonctionnent.

#! /bin/bash
rsync -ahPr --delete-excluded --exclude='.DS_Store' --exclude=Caches/ --ignore-errors --stats --log-file=$LOGFILE --files-from=$FILESFROM ~/$SOURCE /Volumes/$DEST &&
rsync -avh --progress ~/.profile /Volumes/$DEST/_profile/profile &&
rsync -avh --progress ~/.gitconfig /Volumes/$DEST/_profile/gitconfig &&
rsync -avh --progress ~/.ssh/ /Volumes/$DEST/_profile/ssh/ &&
rsync -avh --progress ~/.vim/ /Volumes/$DEST/_profile/vim/

Je fais les 4 dernières commandes séparément, parce que je renomme les fichiers / répertoires à la volée. Vous ne savez pas s'il existe un meilleur moyen de le faire?

J'exécute le script bash -x myscript.shpour voir s'il contient des erreurs, mais non.

sans cuillère
la source
2
Supprimer tout &&de votre script.
Cyrus

Réponses:

3

Fonctionnement

rsync && rsync

lancera le deuxième rsync une fois le premier terminé. Tu veux

rsync&

Explication:

a && b

a court, b court ensuite seulement si un concurrent réussit

a || b

a s'exécute, b s'exécute ensuite uniquement si a se termine sans succès

a; b

a court, b court ensuite peu importe le succès

a& b

un court, est envoyé dans l'arrière-plan. Cela équivaut à exécuter un, en tapant ctrl-Z et le bg en cours d'exécution

Donc, si vous voulez que vos programmes soient exécutés en même temps, remplacez le && s par single &

Peter Berbec
la source
Merci pour les conseils sur l'espacement nécessaire. Peu importe, ça ne fonctionne toujours pas. Si je commente la première grande commande rsync, les 4 autres fonctionnent correctement. Est-ce que j'ai un problème de timing?
sansSpoon
OK, j'ai échangé la commande la plus longue du premier au dernier. Ils tirent maintenant tous correctement. Je ne peux que présumer qu'il y a un problème de timing, mais apprécierais-je que quelqu'un puisse le confirmer?
sansSpoon
Pas un problème de timing. Puisque les quatre dernières commandes ne sont pas exécutées si la commande longue est exécutée en premier, faites-le si la dernière est exécutée en dernier. La commande suivante de la chaîne ne s’exécutera que si la précédente réussit (en raison des doubles - '&' s) , le problème est que la commande longue se termine avec une erreur. (@Facebook - this? Newbsauce here)
Peter Berbec le 22/09/17
Le premier était en effet avoir une erreur. J'ai effacé l'erreur et tout changé en un; b. Ça fonctionne maintenant. Merci @Peter Berbec
sansSpoon
Heureux de vous aider! J'ai eu de l'aide ici des dizaines de fois, mais je n'ai jamais créé de compte. Je me sens chaud et flou!
Peter Berbec