.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?


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

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.


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:


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.