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.


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 &


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.