Você deve fazer parte ou a totalidade de seu .bashrc
não ser executado quando seu shell não for interativo. (Um scp
é um exemplo de uma invocação de shell não interativa, a menos que alguém altere radicalmente seus sistemas.) Em seguida, coloque todos os comandos que possam gerar saída nessa seção do arquivo.
Uma maneira padrão de fazer isso em um arquivo init é:
# Put all the commands here that should run regardless of whether
# this is an interactive or non-interactive shell.
# Example command:
umask 0027
# test if the prompt var is not set
if [ -z "$PS1" ]; then
# prompt var is not set, so this is *not* an interactive shell
return
fi
# If we reach this line of code, then the prompt var is set, so
# this is an interactive shell.
# Put all the commands here that should run only if this is an
# interactive shell.
# Example command:
echo "Welcome, ${USER}. This is the ~/.bashrc file."
Você também pode ver pessoas usando
[ -z "$PS1" ] && exit
em vez da minha declaração if
mais detalhada.
Se não quiser reorganizar todo o seu arquivo, você também pode fazer com que certas linhas sejam executadas apenas no contexto interativo, agrupando-as assim:
if [ -n "$PS1" ]; then
echo "This line only runs in interactive mode."
fi
Se você separar seu .bashrc
dessa maneira, seus comandos scp
não deverão mais ter esse problema.