Configura gnome-terminal per avviare bash come shell di login, non legge .bashrc

20

Sto provando a integrare RVM con gnome-terminal .

Per impostazione predefinita, gnome-terminal non inizia bash come shell di login. Ho attivato run command as a login shell come suggerito in questa risposta sullo stesso argomento che imposta RVM, ma quando lo faccio .bashrc file non letto.

Ad esempio, creo una variabile di ambiente in .bashrc e poi quando avvio un nuovo gnome-terminal non riesco a leggerlo. Devo eseguire esplicitamente source .bashrc per leggere il file.

È questo il comportamento previsto?

    
posta Arturo Herrero 05.05.2012 - 21:25

4 risposte

35

Sì, questo è il comportamento previsto.

Il comportamento, in breve, è il seguente:

  • bash è iniziato come shell di login interattiva: legge ~/.profile
  • bash è iniziato come shell interattiva non di login: legge ~/.bashrc

Leggi il manuale di bash sui file di avvio per ulteriori dettagli.

Personalmente, penso che questo comportamento sia strano e non ho ancora trovato una razionalizzazione per questa decisione progettuale.

Alcune spiegazioni sulla terminologia:

  • Una shell interattiva è una shell con cui è possibile interagire, il che significa che è possibile digitare comandi in essa. La maggior parte delle shell che utilizzerai sono shell interattive.
  • Una shell non interattiva è una shell con cui non puoi interagire. Gli script di shell vengono eseguiti all'interno di shell non interattive.
  • Una shell di accesso è la shell che viene avviata quando accedi al tuo sistema.
  • Una shell non di accesso è una shell che viene avviata dopo il processo di accesso.

La maggior parte delle shell che vedi sono shell interattive non di login . Questo è particolarmente vero se si sta eseguendo un ambiente grafico come gnome, perché quindi gnome è la "shell di login". Ogni sessione di bash avviata all'interno di gnome è una shell non di login. Se vuoi vedere una vera e propria shell di login interattiva, vai su una console virtuale (usando Ctrl+Alt+F1 ) e poi accedi usando il tuo username e password. Questa è una vera shell di login interattiva. Puoi tornare alla shell grafica utilizzando Ctrl+Alt+F7 .

Esiste un'opzione --login che farà si che bash si comporti come se fosse una shell di login anche se avviato dopo aver effettuato l'accesso. Configurare gnome-terminal per avviare bash come shell di login significa che inizierà bash usando% opzione co_de%.

Normalmente vuoi che bash legga sempre --login in una shell interattiva. Ecco come raccomando di farlo:

Crea un file ~/.bashrc . Se bash viene avviato come shell di login, per prima cosa cerca ~/.bash_profile prima di cercare ~/.bash_profile . Se bash trova ~/.profile allora non leggerà ~/.bash_profile .

Inserisci le seguenti righe in ~/.profile :

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

Ora se bash viene avviato come shell di login interattiva, leggerà i seguenti file:

  1. ~/.bash_profile
  2. ~/.bash_profile
  3. ~/.profile

e se bash viene avviato come shell interattiva non di login:

  1. ~/.bashrc

Dovresti inserire elementi che sono bash specifici in ~/.bashrc e cose che non sono bash specifiche in ~/.bashrc . Ad esempio ~/.profile diventa PATH e ~/.profile diventa HISTCONTROL .

Tieni presente che ~/.bashrc non è bash specifico. Altre shell basate su testo (ad esempio sh o ksh) e shell grafiche (gnome) leggono anche ~/.profile . Questo è il motivo per cui non dovresti mettere elementi bash specifici in ~/.profile .

    
risposta data lesmana 05.05.2012 - 22:44
7

Questa non è una decisione di progettazione sbagliata, né un bug, né un comportamento previsto di shell e terminali

È semplicemente uno sfortunato valore predefinito di un'opzione di configurazione per profilo in Gnome Terminal, che puoi facilmente risolvere.

  1. Vai a Modifica - & gt; Preferenze profilo .

  2. Seleziona la scheda Titolo e comando .

  3. Nota come la casella di controllo Esegui comando come shell di login è deselezionata! Controllalo.

Questo è tutto. Se si esegue questa operazione sul profilo Default o su qualsiasi profilo configurato per essere utilizzato quando si creano nuovi terminali, si ottiene una shell di login.

Sto indovinando che sotto il cofano, questa opzione probabilmente farà passare l'opzione -l alla shell.

    
risposta data Guest 18.03.2015 - 00:32
0

Ho avuto la stessa domanda e ho trovato una soluzione: usa semplicemente SSH per una vera shell di login!

1. Come superutente, crea un utente di sistema rvm dedicato per l'isolamento completo e assegna una password:

sudo su

useradd -m rvmuser

passwd rvmuser

2. Installa le dipendenze in modo che rvm possa creare rubini senza chiedere la password del superuser:

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. SSH in localhost per una vera shell di login (potrebbe essere necessario apt-get install ssh )

ssh [email protected]

4. Installa rvm

\curl -sSL https://get.rvm.io | bash -s stable

5. Disconnettersi e tornare nuovamente in modo che tutte le funzioni di rvm siano caricate

exit

ssh [email protected]

sei. Usa rvm:)

    
risposta data Michael Franzl 30.06.2014 - 08:15
0

È comune quando si usa bash per posizionare l'inizializzazione del profilo in .bash_profile , che viene letto solo da bash all'accesso, mentre altre shell hanno storicamente condiviso .profile . Ciò ti consente di posizionare comandi specifici di bash in .bash_profile .

L'uso di quanto segue è comunemente usato per inserire gli alias definiti in .bashrc :

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
    
risposta data Rob Prentice 11.04.2016 - 02:56

Leggi altre domande sui tag