Il s'avère que rsync ne peut pas fonctionner avec un serveur distant qui a un fichier .bashrc?
Chez le client local, j'ai obtenu lors de l'exécution de rsync:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(180) [sender=3.0.7]
Comme suggéré ici, la suppression du .bashrc sur le serveur a résolu le problème. Comment le résoudre sans supprimer (temporairement) le fichier .bashrc?
Réponses:
Vous pouvez rencontrer des problèmes si le
.bashrc
sur le serveur distant sort quelque chose vers le terminal. Rsync ne peut pas s'attendre à cela et peut avoir des problèmes en conséquence.Vous pouvez résoudre ce problème en supprimant toutes les commandes du
.bashrc
texte de sortie ou en redirigeant n'importe quelle sortie vers / dev / null.la source
Le .bashrc n'est vraiment pas le bon endroit pour générer une sortie, car il provoque ce genre de problème. Beaucoup de gens s'en tirent, cependant, jusqu'à ce qu'ils essaient de lancer rsync :-)
Toute sortie souhaitée (et la logique et les commandes associées) doivent être déplacées vers votre .bash_profile (voir, par exemple, la question de défaillance du serveur ".profile vs .bash_profile vs .bashrc" pour une discussion plus approfondie sur les différences entre les fichiers).
De cette façon, vous n'aurez pas à sacrifier l'obtention de la sortie lorsque vous vous connectez, ni à effectuer des modifications temporaires sur votre .bashrc lorsque vous souhaitez utiliser rsync.
la source
J'ai toujours eu des fichiers .bashrc sur mes comptes d'utilisateurs et je n'ai jamais eu ce problème jusqu'à ce que j'essaie aujourd'hui de resynchroniser quelque chose sur mon serveur en utilisant le compte root. Votre message m'a aidé à trouver la solution:
mes fichiers $ user / .bashrc commencent toujours par la section suivante pour éviter ce genre de problème. Je l'ai répliqué sur .bashrc et rsync'ing de root fonctionne maintenant comme un charme!
HTH, karsten
la source
rsync
, car il est pour une raison quelconque classé comme "shell interactif". Mais c'est une bonne ligne à ajouter de toute façon, car cela pourrait gâcher des shells non interactifs sinon s'il y a une sortie.Pour des raisons complexes, rsync / scp / sftp exécute .bashrc lors de la connexion à un autre hôte. Vous devez avoir l'une de ces commandes en haut de votre .bashrc :
Soit
ou
N'importe laquelle des commandes ci-dessus autorisera uniquement l'exécution du reste des commandes .bashrc pour les sessions interactives . Pour autant que je sache, vous n'en avez pas besoin pour tout autre type de session (et en effet j'ai vu bashrc par défaut d'Arch et Debian utilisant cette technique dans leur bashrc).
Si toutefois vous voulez être paranoïaque supplémentaire à propos de l'exécution de vos commandes bashrc même pour des sessions non interactives, vous devez au moins encapsuler les commandes de votre bashrc qui produisent une sortie comme celle-ci ( référence ) afin qu'elles ne s'exécutent que dans des sessions interactives:
Notez que d'autres suggèrent de déplacer des commandes qui produisent du texte dans votre bash_profile mais j'ai des doutes quant à savoir si c'est toujours bon (pour les raisons expliquées ici )
la source