Secure Shell não é adequado para carregar .bashrc

1

Eu tenho um problema aparentemente simples - eu tenho um servidor 15.04 ao qual me conecto via ssh . Atualmente, tenho algumas pastas adicionadas à minha variável de ambiente PATH no meu arquivo .bashrc :

#... (rest of .bashrc)

export PATH=$PATH:/home/athan/bin

Isso permite que o comando foo fique visível. Quando eu seguro o shell diretamente no servidor, posso usar foo bem:

athan@mine $> ssh [email protected]
athan@place $> foo
foo!

No entanto, quando tento executar um comando remotamente , o foo está longe de ser encontrado:

athan@mine $> ssh [email protected] "foo"
bash: foo: command not found

Ainda mais estranho, quando explicitamente source my .bashrc , ainda ainda não pode ser encontrado:

athan@mine $> ssh [email protected] 'bash -lc "source /home/athan/.bashrc && foo"'
bash: foo: command not found

A chamada de procedimento remoto sshd tem um comportamento de ambiente diferente? Existe um arquivo separado que eu deveria estar olhando? Não tenho ideia do que mais poderia estar errado.

    
por Athan Clark 06.05.2015 / 22:24

1 resposta

2

Normalmente, .bashrc é originado apenas para shells interativos, mas muitas distribuições de linux decidem construir o bash com uma opção especial para também fornecê-lo para shells não interativas se uma variável SSH_something estiver no ambiente. No entanto, ele não alterna o shell para o modo interativo ao fazer isso, portanto, o seguinte comando case está próximo da parte superior do padrão .bashrc :

case $- in
    *i*) ;;
      *) return;;
esac

Descobre que o shell não é interativo, portanto, ele retorna.

Se você colocar a atribuição PATH acima desse bloco, isso deve funcionar. Apenas certifique-se de que o que você colocar acima desse bloco não produza nada, pois isso irá quebrar scp e rsync .

    
por geirha 06.05.2015 / 22:35