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.sh
pour voir s'il contient des erreurs, mais non.
&&
de votre script.Réponses:
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 &
la source