Зі складних причин rsync / scp / sftp запускає .bashrc під час підключення до іншого хоста. Ви повинні мати будь-яку з цих команд у верхній частині свого .bashrc :
або
[[ $- != *i* ]] && return
або
[ -z "$PS1" ] && return
Будь-яка з перерахованих вище команд дозволить виконати решту команд .bashrc лише для інтерактивних сесій . Наскільки я знаю, вони вам не потрібні для будь-якого іншого типу сеансу (і я дійсно бачив bashrc від Arch та Debian за замовчуванням, що використовують цю техніку в їх bashrc).
Якщо ви хочете бути додатковим параноїком щодо того, щоб дозволити командам bashrc запускатись навіть для неінтерактивних сесій, вам слід принаймні обернути команди вашого bashrc, які дають такий результат ( довідковий ), щоб вони виконувались лише в інтерактивних сесіях:
if shopt -q login_shell; then
# this is an interactive session, we _can_ display output
...code that produces output goes here...
fi
Зауважте, що інші пропонують переміщувати команди, які виводять текст до вашого bash_profile, але я сумніваюся, чи завжди це добре (з пояснених тут причин )