Acontece que o rsync não pode funcionar com um servidor remoto que possui um arquivo .bashrc?
No cliente local, obtive ao executar o 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]
Como sugerido aqui, remover o .bashrc no servidor resolveu o problema. Como resolvê-lo sem remover o arquivo .bashrc (temporariamente)?
Respostas:
Você pode ter problemas se o
.bashrc
servidor remoto enviar algo ao terminal. O Rsync pode não esperar isso e pode ter problemas como resultado.Você pode corrigir isso removendo qualquer comando no
.bashrc
texto de saída ou canalizando qualquer saída para / dev / null.fonte
O .bashrc realmente não é o local correto para gerar saída, pois causa esse tipo de problema. Muitas pessoas se safam disso, até que tentam executar o rsync :-)
Qualquer saída desejada (e a lógica e os comandos associados) devem ser movidos para o seu .bash_profile (consulte, por exemplo, a pergunta sobre falha do servidor ".profile vs. .bash_profile vs. .bashrc" para discussão adicional sobre as diferenças entre os arquivos).
Dessa forma, você não precisará sacrificar a obtenção da saída quando efetuar o login, nem lidar com as alterações temporárias no seu .bashrc quando desejar usar o rsync.
fonte
Eu sempre tive arquivos .bashrc nas minhas contas de usuário e nunca tive esse problema até que tentei hoje sincronizar algo no meu servidor usando a conta raiz. Sua postagem me ajudou a encontrar a solução:
meus arquivos $ user / .bashrc sempre começam com a seção a seguir para evitar esse tipo de problema. Eu o repliquei no .bashrc e no rsync'ing do root agora funciona como um encanto!
HTH, karsten
fonte
rsync
, porque, por qualquer motivo, é classificado como "shell interativo". Mas é uma boa linha para adicionar de qualquer maneira, porque pode danificar shells não interativos, caso contrário, se houver alguma saída.Por motivos complexos, o rsync / scp / sftp executa .bashrc ao conectar-se a outro host. Você deve ter qualquer um destes comandos na parte superior do seu .bashrc :
ou
ou
Qualquer um dos comandos acima permitirá apenas a execução do restante dos comandos .bashrc para sessões interativas . Até onde eu sei, você não precisa delas para nenhum outro tipo de sessão (e, de fato, eu vi o bashrc padrão do Arch e Debian usando essa técnica no bashrc).
Se, no entanto, você quiser ser mais paranóico ao permitir que seus comandos bashrc sejam executados mesmo para sessões não interativas, você deve pelo menos agrupar os comandos do bashrc que produzem saída como esta ( referência ) para que eles sejam executados apenas em sessões interativas:
Observe que outros sugerem mover comandos que produzam texto para o seu bash_profile, mas tenho minhas dúvidas sobre se isso sempre é bom (por razões explicadas aqui )
fonte