Okazuje się, że rsync nie może współpracować ze zdalnym serwerem, który ma plik .bashrc?
Na kliencie lokalnym dostałem po uruchomieniu 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]
Jak sugerowano tutaj, usunięcie pliku .bashrc na serwerze rozwiązało problem. Jak rozwiązać problem bez tymczasowego usuwania pliku .bashrc?
Odpowiedzi:
Możesz napotkać problemy, jeśli
.bashrc
na zdalnym serwerze coś wyjdzie na terminal. Rsync może się tego nie spodziewać i może powodować problemy.Możesz to naprawić, usuwając wszelkie polecenia z
.bashrc
tekstu wyjściowego lub przesyłając dane wyjściowe do / dev / null.źródło
Plik .bashrc nie jest naprawdę właściwym miejscem do generowania danych wyjściowych, ponieważ powoduje tego rodzaju problem. Jednak wiele osób ucieka, dopóki nie spróbują uruchomić rsync :-)
Wszelkie pożądane dane wyjściowe (i związane z nimi logiki i polecenia) należy przenieść do pliku .bash_profile (patrz np. Pytanie o awarię serwera „.profile vs. .bash_profile vs. .bashrc” w celu dalszej dyskusji na temat różnic między plikami).
W ten sposób nie będziesz musiał poświęcać uzyskiwania danych wyjściowych podczas logowania, ani zajmować się wprowadzaniem tymczasowych zmian w .bashrc, gdy chcesz użyć rsync.
źródło
Zawsze miałem pliki .bashrc na moich kontach użytkowników i nigdy nie miałem tego problemu, dopóki nie spróbowałem dziś zsynchronizować czegoś z moim serwerem przy użyciu konta root. Twój post pomógł mi znaleźć rozwiązanie:
Moje pliki $ user / .bashrc zawsze zaczynają się od poniższej sekcji, aby zapobiec tego rodzaju problemowi. Powieliłem go na .bashrc roota i rsync'ing działa teraz jak urok!
HTH, karsten
źródło
rsync
, ponieważ jest z jakiegokolwiek powodu klasyfikowane jako „powłoka interaktywna”. Ale i tak warto to dodać, ponieważ w przeciwnym razie mogłoby to zepsuć nieinteraktywne powłoki.Ze złożonych powodów rsync / scp / sftp uruchamia .bashrc podczas łączenia się z innym hostem. Musisz mieć dowolne z tych poleceń u góry .bashrc :
zarówno
lub
Każde z powyższych poleceń pozwoli na wykonanie tylko pozostałych poleceń .bashrc dla sesji interaktywnych . O ile wiem, nie potrzebujesz ich do żadnej innej sesji (i rzeczywiście widziałem domyślny bashrc od Arch i Debiana używający tej techniki w swoim bashrc).
Jeśli jednak chcesz być wyjątkowo paranoikiem, jeśli chodzi o zezwolenie na uruchamianie poleceń bashrc nawet w przypadku sesji nieinteraktywnych, powinieneś przynajmniej zawinąć polecenia bashrc, które generują takie dane wyjściowe ( odniesienie ), aby działały tylko w sesjach interaktywnych:
Zauważ, że inni sugerują przenoszenie poleceń, które wypisują tekst na twój profil bash, ale mam wątpliwości, czy to zawsze jest dobre (z powodów wyjaśnionych tutaj )
źródło