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
[[ $- != *i* ]] && return
ou
[ -z "$PS1" ] && return
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:
if shopt -q login_shell; then
# this is an interactive session, we _can_ display output
...code that produces output goes here...
fi
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 )