Оказывается, rsync не может работать с удаленным сервером, на котором есть файл .bashrc?
На локальном клиенте я получил при запуске 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]
Как предложено здесь, удаление .bashrc на сервере решило проблему. Как решить это, не удаляя файл .bashrc (временно)?
Ответы:
Вы можете столкнуться с проблемами, если
.bashrc
на удаленном сервере что-то выводит на терминал. Rsync может не ожидать этого и может иметь проблемы в результате.Вы можете исправить это, удалив любые команды в этом
.bashrc
выводимом тексте или отправив любой вывод в / dev / null.источник
.Bashrc на самом деле не является правильным местом для генерации вывода, так как это вызывает проблемы такого рода. Однако многим это сходит с рук, пока они не попытаются запустить rsync :-)
Любой желаемый вывод (и связанные логика и команды) должны быть перемещены в ваш файл .bash_profile (см., Например, вопрос о сбое сервера ".profile vs. .bash_profile vs. .bashrc" для дальнейшего обсуждения различий между файлами).
Таким образом, вам не нужно жертвовать получением выходных данных при входе в систему, а также не делать временных изменений в вашем .bashrc, когда вы хотите использовать rsync.
источник
У меня всегда были файлы .bashrc в моих учетных записях пользователей, и у меня никогда не было этой проблемы, пока я сегодня не попытался что-то rsync на свой сервер, используя учетную запись root. Ваш пост помог мне найти решение:
Мои файлы $ user / .bashrc всегда начинаются со следующего раздела, чтобы избежать подобных проблем. Я скопировал его в .bashrc root, и rsync'ing теперь работает как шарм!
HTH, карстен
источник
rsync
, потому что по какой-либо причине классифицируется как «интерактивная оболочка». Но в любом случае это хорошая строка для добавления, потому что в противном случае она может испортить неинтерактивные оболочки, если они есть.По сложным причинам rsync / scp / sftp запускает .bashrc при подключении к другому хосту. У вас должна быть любая из этих команд в верхней части вашего .bashrc :
или
или
Любая из вышеперечисленных команд разрешит выполнение только остальных команд .bashrc для интерактивных сеансов . Насколько я знаю, они вам не нужны ни для какого другого типа сессии (и действительно, я видел bashrc по умолчанию из Arch и Debian, использующий эту технику в их bashrc).
Однако, если вы хотите быть более параноидальными в том, что ваши команды bashrc должны выполняться даже для неинтерактивных сеансов, вы должны, по крайней мере, обернуть команды вашего bashrc, которые производят вывод, подобный этому ( ссылка ), чтобы они выполнялись только в интерактивных сеансах:
Обратите внимание, что другие предлагают перенести команды, выводящие текст, в ваш bash_profile, но у меня есть сомнения по поводу того, всегда ли это хорошо (по причинам, объясненным здесь )
источник