Executando scp quando .bashrc da máquina remota inclui o comando source

5

Não consigo copiar um arquivo pelo scp quando o arquivo .bashrc da máquina remota inclui o comando source para atualizar caminhos e algumas variáveis. Por que isso acontece?

    
por yildizabdullah 08.09.2014 / 17:01

2 respostas

7

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.

    
por 08.09.2014 / 19:46
0

Essa solução também funcionou para mim. Mas como meu shell padrão é TCSH, tive que editar um pouco a correção da seguinte maneira (em .tcshrc):

if ( $?SSH_TTY ) then
    exec /bin/bash
endif

Pensei em compartilhar para o benefício de todos.

    
por 12.01.2017 / 06:09

Tags