.bashrc al login ssh


375

Quando ssh nella mia ubuntu-box con Hardy 8.04, le variabili d'ambiente nel mio .bashrc non sono impostate.

Se faccio una fonte .bashrc, le variabili sono impostate correttamente e tutto va bene.

Come .bashrcmai non viene eseguito al login?


92
Come diavolo è questo "fuori tema"?
Giona,

8
Non sono severo come questo, ma la mia ipotesi è che questo appartenga a serverfault.com, superuser.com o askubuntu.com
Michael Butler

16
@MichaelButler Concordato. Mi chiedo perché non lo spostino invece di chiuderlo ...
Luc

4
@Luc - Le domande possono essere spostate solo entro 60 giorni dalla creazione. Questa domanda non è stata chiusa come off topic fino a 3 anni e mezzo dopo la sua creazione. Credo che la regola dei 60 giorni abbia qualcosa a che fare quando si esegue il backup dei database delle domande o qualcosa del genere ... diventa più difficile migrare dopo il backup.
ArtOfWarfare il

Ho pensato che fosse una domanda piuttosto utile. Si è verificato questo problema quando ho dovuto accedere alla macchina A per accedere alla macchina B (accessibile solo tramite la rete locale A). Mi ha insegnato una differenza pratica tra .bashrce .bash_profile!
information_interchange

Risposte:


621

.bashrcnon proviene quando si accede utilizzando SSH. Devi procurartelo in .bash_profilequesto modo:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

32
questo dovrebbe funzionare su qualsiasi distribuzione sana con Bash, quindi tutti questi commenti sono obsoleti :)

1
Questo non è necessario con il server Ubuntu 12.04 LTS, poiché .bashrcviene fornito di default quando si accede a SSH.
Orokusaki,

4
@orokusaki: Correzione, è :) C'era un file .bash_profile non valido che stava forzando il salto di .profile.
Lester Peabody

4
Come @LesterPeabody, il mio .bashrc non veniva fornito su un server Ubuntu 12.04 LTS a causa di un falso .bash_profile. È stato creato dall'installazione di RVM. Ho spostato il comando RVM in .profile ed eliminare .bash_profile. Ora tutto funziona bene.
Rod Daunoravicius,

4
FWIW Debian Jessie / già 8 fonti .bashrcout-of-the-box - ma lo fa da .profile, non è .bash_profile.
underscore_d

75

Ho avuto una situazione simile come Hobhouse. Volevo usare il comando

 ssh myhost.com 'some_command'

e 'some_command' esiste in '/ var / some_location' quindi ho provato ad aggiungere '/ var / some_location' nell'ambiente PATH modificando '$ HOME / .bashrc'

ma non funzionava. perché il predefinito .bashrc (Ubuntu 10.4 LTS) impedisce l'approvvigionamento di codice come di seguito

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

quindi Se si desidera modificare l'ambiente per la shell non login ssh. dovresti aggiungere il codice sopra quella linea.


7
Grazie compagno! Questa è stata la parte che non ha funzionato per me :)
Raymond Barlow il

Punta fredda rugiada. Mi sono imbattuto in questa trappola durante l'esecuzione di script da jenkins. Ho effettuato l'accesso tramite SSH e ha funzionato. Jenkins si è registrato in modo non interattivo e non è riuscito.
Krzysztof Jabłoński,

1
Perché la soluzione comune non sia nemmeno impostare un nuovo percorso per shell non interattive è oltre me. Dovrebbe esserci un po 'più di quanto sopra in caso di affermazione, proprio per questo motivo. Sembra che solo gli alias e l'inizializzazione degli strumenti interattivi dovrebbero andare al di sotto di quella linea ...
BenPen,

2
Su un'altra versione di Ubuntu il controllo interattivo è simile al seguente:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain,

Grazie, questo mi ha risolto. Vorrei averlo visto circa un'ora fa!
Justin Lawrence,

31

Per una risorsa eccellente su come funziona l'invocazione di bash, cosa fanno i dotfile e come dovresti usarli / configurarli, leggi questo:


Il passaggio chiave: "fa sì che legga / etc / profile e poi uno di .bash_profile o .bash_login o .profile."
Andy Hayden,

29

Se la soluzione di ayman non funziona, prova a nominare il tuo file .profileinvece di .bash_profile. Questo ha funzionato per me.


2
Eccezionale. Ho perso 15 minuti su questo dettaglio.
vmassuchetto,

Questo ha funzionato su Ubuntu 12.10
ThinkCode

1
penso che .profile si carica al login della GUI. .bash_profile è relativo agli accessi al terminale.
Razec Luar,

Questo ha funzionato anche per l'accesso SSH a un contenitore docker Debian Jessie (usando un contenitore solo dati per l'archiviazione persistente) - MA potresti anche voler controllare / etc / passwd per verificare che la shell di accesso sia / bin / bash e non / bin / sh -------> / bin / dash
Stuart Cardall

1
@RazecLuar .profiledeve essere eseguito da qualsiasi shell di login, indipendentemente dal fatto che detta shell intenda generare una GUI. Il tuo commento contraddice totalmente la domanda e questa risposta, che indicano chiaramente che .profileè invocato su SSHing - un metodo chiaramente non GUI.
underscore_d
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.