Por razones complejas, rsync / scp / sftp ejecuta .bashrc cuando se conecta a otro host. Debe tener cualquiera de estos comandos en la parte superior de su .bashrc :
ya sea
[[ $- != *i* ]] && return
o
[ -z "$PS1" ] && return
Cualquiera de los comandos anteriores solo permitirá la ejecución del resto de comandos .bashrc para sesiones interactivas . Hasta donde sé, no los necesita para ningún otro tipo de sesión (y de hecho, he visto bashrc predeterminado de Arch y Debian usando esta técnica en su bashrc).
Sin embargo, si desea ser más paranoico acerca de permitir que sus comandos bashrc se ejecuten incluso para sesiones no interactivas, al menos debe ajustar los comandos de su bashrc que producen resultados como este ( referencia ) para que solo se ejecuten en sesiones interactivas:
if shopt -q login_shell; then
# this is an interactive session, we _can_ display output
...code that produces output goes here...
fi
Tenga en cuenta que otros sugieren mover comandos que envían texto a su bash_profile, pero tengo mis dudas sobre si esto siempre es bueno (por las razones explicadas aquí )