Es stellt sich heraus, dass rsync nicht mit einem Remote-Server mit einer .bashrc-Datei funktioniert.
Beim lokalen Client bekam ich beim Ausführen von 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]
Wie hier vorgeschlagen , wurde das Problem durch Entfernen der .bashrc auf dem Server behoben. Wie kann man es lösen, ohne die .bashrc-Datei (vorübergehend) zu entfernen?
Antworten:
Sie können auf Probleme stoßen, wenn der
.bashrc
auf dem Remote-Server etwas an das Terminal ausgibt. Rsync erwartet dies möglicherweise nicht und kann daher Probleme verursachen.Sie können dies beheben, indem Sie alle Befehle im
.bashrc
Ausgabetext entfernen oder die Ausgabe an / dev / null weiterleiten.quelle
Die .bashrc-Datei ist wirklich nicht der richtige Ort, um eine Ausgabe zu generieren, da dies ein solches Problem verursacht. Viele Leute kommen damit durch, bis sie versuchen, rsync auszuführen :-)
Jede gewünschte Ausgabe (und die zugehörige Logik und Befehle) sollte in Ihr .bash_profile verschoben werden (siehe z. B. Serverfehlerfrage ".profile vs. .bash_profile vs. .bashrc" für weitere Erläuterungen zu den Unterschieden zwischen den Dateien).
Auf diese Weise müssen Sie weder die Ausgabe opfern, wenn Sie sich anmelden, noch temporäre Änderungen an Ihrer .bashrc vornehmen, wenn Sie rsync verwenden möchten.
quelle
Ich hatte schon immer .bashrc-Dateien in meinen Benutzerkonten und hatte dieses Problem nie, bis ich heute versuchte, mit dem Root-Konto etwas mit meinem Server zu synchronisieren. Ihr Beitrag hat mir geholfen, die Lösung zu finden:
Meine $ user / .bashrc-Dateien beginnen immer mit dem folgenden Abschnitt, um solche Probleme zu vermeiden. Ich habe es auf root's .bashrc repliziert und rsync'ing funktioniert jetzt wie ein Zauber!
HTH, Karsten
quelle
rsync
, da es aus irgendeinem Grund als "interaktive Shell" eingestuft wird. Aber es ist trotzdem eine gute Zeile, die hinzugefügt werden kann, da sie andernfalls nicht interaktive Shells beschädigen könnte, wenn eine Ausgabe vorhanden ist.Aus komplexen Gründen führt rsync / scp / sftp .bashrc aus, wenn eine Verbindung zu einem anderen Host hergestellt wird. Sie müssen einen dieser Befehle oben in Ihrer .bashrc-Datei haben :
entweder
oder
Mit den oben genannten Befehlen können nur die restlichen .bashrc-Befehle für interaktive Sitzungen ausgeführt werden . Soweit ich weiß, brauchen Sie sie für keine andere Art von Sitzung (und tatsächlich habe ich Standard-BashRC von Arch und Debian gesehen, die diese Technik in ihrem BashRC verwenden).
Wenn Sie jedoch besonders paranoid sein möchten, wenn Sie Ihre bashrc-Befehle auch für nicht interaktive Sitzungen ausführen lassen möchten, sollten Sie die Befehle Ihres bashrc, die eine Ausgabe wie diese ( Referenz ) erzeugen, mindestens so umbrechen, dass sie nur in interaktiven Sitzungen ausgeführt werden:
Beachten Sie, dass andere das Verschieben von Befehlen vorschlagen, die Text in Ihr bash_profile ausgeben, aber ich habe meine Zweifel, ob dies immer gut ist ( aus den hier erläuterten Gründen ).
quelle