По сложным причинам 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, но у меня есть сомнения по поводу того, всегда ли это хорошо (по причинам, объясненным здесь )