.bashrc no ssh login

375

Quando ssh no meu ubuntu-box executando o Hardy 8.04, as variáveis ​​de ambiente no meu .bashrcnão são definidas.

Se eu fizer uma fonte .bashrc, as variáveis ​​estão definidas corretamente e tudo está bem.

Como .bashrcé que não é executado no login?

Hobhouse
fonte
92
Como diabos é esse "fora de tópico"?
Jonah
8
Eu não sou rigoroso como este, mas meu palpite é que este pertence em serverfault.com, superuser.com ou askubuntu.com
Michael Butler
16
@MichaelButler Concordou. Admira por isso que eles não movê-lo em vez de apenas fechá-lo ...
Luc
4
@ Luc - As perguntas só podem ser movidas dentro de 60 dias após a criação. Esta questão não foi encerrada como fora de tópico até três anos e meio após sua criação. Acredito que a regra dos 60 dias tenha algo a ver com o backup dos bancos de dados de perguntas ou algo assim ... fica mais difícil migrar após a ocorrência desse backup.
ArtOfWarfare 22/09
Eu pensei que era uma pergunta bastante útil. Foi encontrado esse problema quando tive que fazer o ssh na máquina A, para fazer o ssh na máquina B (acessível apenas pela rede local de A). Me ensinou uma diferença prática entre .bashrce .bash_profile!
Information_interchange

Respostas:

621

.bashrcnão é fornecido quando você faz login usando SSH. Você precisa obtê-lo da .bash_profileseguinte maneira:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
Ayman Hourieh
fonte
32
esta deve funcionar em qualquer distro sane com Bash, assim, todos esses comentários são obsoletos :)
11
Isso não é necessário no servidor Ubuntu 12.04 LTS, pois .bashrcé fornecido quando você faz o SSH, por padrão.
Orokusaki
4
@orokusaki: Correção, é :) Havia um arquivo .bash_profile desonesto que estava forçando o .profile a ser ignorado.
Lester Peabody
4
Como @LesterPeabody, meu .bashrc não estava sendo originado em um servidor Ubuntu 12.04 LTS por causa de um .bash_profile não autorizado. Foi criado pela instalação do RVM. Mudei o comando RVM para .profile e exclua .bash_profile. Tudo funcionando bem agora.
Rod Daunoravicius 25/10
4
fwiw O Debian Jessie / 8 já obtém fontes prontas .bashrcpara uso - mas faz isso .profilenão .bash_profile.
underscore_d
75

Eu tive uma situação semelhante como Hobhouse. Eu queria usar o comando

 ssh myhost.com 'some_command'

e 'some_command' existe em '/ var / some_location', então tentei acrescentar '/ var / some_location' no ambiente PATH editando '$ HOME / .bashrc'

mas isso não estava funcionando. porque o padrão .bashrc (Ubuntu 10.4 LTS) impede a fonte de código como abaixo

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Então, se você deseja alterar o ambiente para o shell ssh sem login. você deve adicionar código acima dessa linha.

ruseel
fonte
7
Obrigado companheiro! Este foi o pouco que não funcionou para mim :)
Raymond Barlow
Orvalho fresco da ponta. Corri para essa armadilha ao executar scripts de jenkins. Eu entrei via ssh e funcionou. Jenkins fez logon de maneira não interativa e falhou.
Krzysztof Jabłoński
11
Por que a solução comum é nem definir um novo caminho para shells não interativos está além de mim. Deve haver um pouco acima dessa declaração if, por esse motivo. Parece que apenas os aliases e a inicialização de ferramentas interativas deve ir abaixo dessa linha ...
BenPen
2
Em outra versão do Ubuntu, a verificação interativa se parece com:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain
Obrigado, isso resolveu para mim. Gostaria de ter visto isso cerca de uma hora atrás!
Justin Lawrence
31

Para um excelente recurso sobre como a chamada bash funciona, quais arquivos de ponto fazem o que e como você deve usá-los / configurá-los, leia isto:

lhunath
fonte
A passagem principal: "faz com que ele leia / etc / profile e, em seguida, entre um .bash_profile ou .bash_login ou .profile."
Andy Hayden
29

Se a solução da ayman não funcionar, tente nomear seu arquivo em .profilevez de .bash_profile. Isso funcionou para mim.

Loïc Wolff
fonte
2
Impressionante. Perdi 15 minutos com esse detalhe.
vmassuchetto
Isso fez o truque no Ubuntu 12.10
ThinkCode 6/13
11
Eu acho que .profile carrega no login da GUI. .bash_profile é para logins de terminal.
Razec Luar 5/11
Isso também funcionou para o logon SSH em um contêiner do docker Debian Jessie (usando um contêiner apenas de dados para armazenamento persistente) - MAS você também pode verificar / etc / passwd para verificar se seu shell de logon é / bin / bash e não / bin / sh -------> / bin / dash
Stuart Cardall
11
O @RazecLuar .profiledeve ser executado por qualquer shell de login, independentemente de o referido shell pretender gerar uma GUI. Seu comentário contradiz totalmente a pergunta e a resposta, que indicam claramente que .profileé invocado no SSHing in - um método distintamente não GUI.
underscore_d