/ etc / profilo non proveniente


45

Per 11.04, ho fatto una nuova installazione del mio sistema. Parte dell'installazione consisteva nell'installare rvm , che si attacca rvm.sha /etc/profile.d/. Questo non funziona in quanto /etc/profile(che carica ogni + r in /etc/profile.d/*.sh) non viene caricato. Secondo la documentazione, il profilo viene fornito solo se bash viene eseguito nel login. Per verificarlo, ho invocato bash --login, dopodiché rvmera disponibile.

Questo ha funzionato per me nelle versioni precedenti di Ubuntu senza alcuna configurazione. Cioè, una nuova installazione di 10.10 fornirà correttamente profilo / .d.

La mia domanda è: c'è qualcosa che sto facendo di sbagliato o ci sono alcune nuove assunzioni fatte a Natty che hanno rotto questo? La mia attuale soluzione è di source /etc/profilein ~/.bashrc(che è terribile in quanto il profilo è destinato a caricare prima di bashrc, ma fa il trucco).

Risposte:


52

Per impostazione predefinita, gnome-terminal non si avvia bash come shell di login (suppongo che tu intenda bash avviato all'interno di un gnome-terminal). Ciò significa che bash non leggerà /etc/profileo ~/.profile. Come hai osservato correttamente, bash leggerà quei file se avviati come shell di login.

La soluzione rapida al tuo problema è configurare gnome-terminal per avviare bash come shell di login in modo che legga /etc/profile. Per fare ciò devi abilitare "Esegui comando come shell di accesso" nel "Preferenze profilo" di gnome-terminale raggiungibile dal menu Modifica.

Non consiglio di farlo perché confonde la distinzione tra ~/.profilee ~/.bashrc. Idealmente ~/.profiledovrebbe fare cose che sono richieste solo una volta, durante il login, mentre ~/.bashrcdovrebbe fare cose che sono necessarie ogni volta che bash viene avviato.

C'è una domanda e una risposta in superutente che parla della differenza tra bashrc e profilo . Leggi lì per maggiori informazioni.

Dalla descrizione del tuo problema sembra che lo script rvm debba essere caricato una sola volta, durante il login. Per quanto ne so Ubuntu ha configurato il login grafico per leggere /etc/profile/e ~/.profile. Ciò significa che, dopo aver effettuato il logout e il login una volta, lo script rvm dovrebbe essere attivo. Se continua a non funzionare, forse lo script rvm deve essere caricato per ogni sessione bash. In tal caso, allora bashrcè il posto più appropriato per lo script.


L'impostazione di "comando run come shell di login" è stata effettivamente caricata /etc/profile(e quindi i .d). Grazie per la spiegazione - sembra che questo richieda il follow-up con la gente rvm.
Marc,

7
Ubuntu 11.04 non sembra leggere /etc/profilee ~/.profiledurante il login. È strano perché ha sempre funzionato con le versioni precedenti. Penso che questa non sia una soluzione ma una soluzione alternativa.
Luca

2
@lesmana È possibile abilitare "Esegui comando come shell di accesso" dalla CLI anziché dalla GUI? Vengo trasferito su un server remoto e non posso inoltrare X localmente.
Waseem,

5

Esiste, tuttavia, un file /etc/bash.bashrc letto da gnome-terminal ed è il "file .bashrc a livello di sistema per le shell interattive bash (1)".

La mia chiamata alla funzione rvm è [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"andata lì e funziona perfettamente per la coppia di utenti su quel sistema.


gnome-terminal non fa nulla del genere. gnome-terminal esegue bash (o qualunque sia la tua shell di login impostata nel database passwd) in modalità interattiva, e bash avviato legge in modo interattivo /etc/bash.bashrc. Bene, almeno su Debian / Ubuntu. Bash normalmente non legge una bashrc a livello di sistema; debian l'ha corretto per farlo.
Geirha,

@geirha: dmitri @ Eos: ~ $ uname -a Linux Eos 3.0.0-16-generic # 29-Ubuntu SMP mar 14 febbraio 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux dmitri @ Eos: ~ $ cat / etc / bash.bashrc # File .bashrc a livello di sistema per shell interattive bash (1). # Per abilitare le impostazioni / i comandi in questo file anche per le shell di login, # questo file deve essere fornito in / etc / profile. # Se non funziona in modo interattivo, non fare nulla [-z "$ PS1"] && return .....
Dmitri

2
Sì, ovviamente, gnome-terminal invoca bash per leggere quel file: se la tua shell è ksh, allora gnome-terminal non legge quel file, vero? Posso suggerire di cercare la parola "pedante" nel dizionario prima di continuare a usare frasi provocatorie come "non fa nulla del genere".
Dmitri

4

L'installazione di RVM come multiutente richiede all'utente di eseguire questo comando:

(poiché Ubuntu non esegue il sorgente /etc/profile.d al login)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

3
Ubuntu esegue il source dei file /etc/profile.d/durante il login perché il default /etc/profilepassa attraverso i file e li esegue /etc/profile.d/. Tuttavia, se questo rvm.shcontiene codice per shell interattive, come funzioni o alias, farle approvare non ha /etc/profilesenso. L'installazione per sessioni bash interattive deve essere attiva .bashrc.
Geirha,


0

Ho effettivamente trovato per coloro a cui non piace riavviare completamente le proprie scatole a meno che non sia assolutamente necessario quanto segue ...

Non è necessario riavviare l'intero computer per /etc/profilerendere effettive le modifiche . Tutto ciò che serve è riavviare la GUI di XWindows Desktop in modo da rileggere nuovamente le configurazioni (come se fosse avviata come parte di un riavvio a livello di sistema).

Per me uso xUbuntu che utilizza LightDM ma è possibile eseguire il sub in qualsiasi eseguibile chiama il desktop corrente.

Innanzitutto, non è possibile utilizzare un emulatore di terminale all'interno della stessa GUI desktop per farlo (almeno non con LightDM) è necessario utilizzare SSH o una console secondaria (se si tiene premuto Ctrl + Alt e si preme un tasto F o un tasto numerico dovresti abbandonare l'accesso o lo schermo del desktop grafico in una finestra terminale semplice). Ti suggerisco anche di chiudere tutte le cose del desktop remoto come VNC se stai usando SSH (ovviamente SSH può essere collegato, semplicemente non vuoi che una finestra VNC aperta esegua il polling dello schermo 0 mentre sta provando a riavviare in quanto ciò potrebbe bloccare il riavvio mentre ti aspetta per terminare la sessione VNC).

Lo faccio sempre con SSH ed è un grande salvavita soprattutto quando non sei fisicamente dalla tua macchina e non hai voglia di aspettare un riavvio completo e riconnetterti :-D

Ora la parte facile una volta in un terminale "secondario" o problema SSH: (Sì, questo ucciderà la tua sessione corrente, assicurati che non ti dispiaccia, salva documenti aperti o lavori)

sudo service lightdm restart

attendere un minuto mentre uccide il desktop e poi lo riavvia (ciò può richiedere alcuni secondi buoni poiché le cose vengono arrestate e quindi eseguite nuovamente all'avvio)

Ecco fatto, ora quando torni alla console 0 o vai a utilizzare VNC per riconnetterti, verrai accolto dal prompt di accesso e accedi normalmente e se apri un emulatore di terminale e vai a emettere il tuo comando, dovresti ora non ci sono problemi in quanto tutto è stato rinviato come se avessi fatto un riavvio completo della macchina.

Basta ricordare, se si emette sudo service lightdm restart[o stop, start, qualunque cosa] dall'interno dell'ambiente desktop stesso utilizzando un emulatore di terminale il comando sarà semplicemente appendere là e nulla vi sembrerà accadere. Questo perché al momento stai utilizzando quella console (aka display) 0 e quindi non può scendere completamente e tornare indietro poiché è in attesa che il desktop non sia in uso prima di eseguire il comando.

Ultima nota: non ho provato a eseguire il riavvio sull'ambiente dall'interno del desktop in un emulatore di terminale e quindi passare a un'altra console che potrebbe quindi riavviarlo, ma se si sta già per cambiare console allora perché non eseguire semplicemente il comando da lì come dovrebbe essere comunque?


-4

echo ". .profile" >> ~ / .bashrc

E poi apri un'altra finestra. Penso che questo sia l'approccio semplice.


1
Poiché le .profileorigini predefinite .bashrc, ciò comporterebbe un ciclo per la maggior parte degli utenti.
Muru,
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.