Para motivos complexos , o rsync / scp / sftp executa .bashrc ao se conectar a outro host. Você deve ter qualquer um desses comandos no topo do seu .bashrc :
ou
[[ $- != *i* ]] && return
ou
[ -z "$PS1" ] && return
Qualquer um dos comandos acima só permitirá a execução do resto dos comandos .bashrc para sessões interativas . Até onde eu sei, você não precisa deles para nenhum outro tipo de sessão (e de fato eu vi o padrão bashrc do Arch e do Debian usando essa técnica em seu bashrc).
Se, no entanto, você quiser ser mais paranóico em 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 uma saída como essa ( referência ) para que eles sejam executados somente 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 outras pessoas sugerem a movimentação de comandos que geram texto para o seu bash_profile, mas tenho minhas dúvidas sobre se isso é sempre bom (para razões explicadas aqui )