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.