GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il ~/.bash_profile non funziona?

Sto usando Linux Mint. La mia shell di accesso (cat /etc/passwd | grep myUserName ) è bash.

Dopo aver avviato il mio ambiente desktop grafico ed eseguito un emulatore di terminale da esso, posso vedere che .bash_profile non è di origine (vars di ambiente che sono export ed in esso non sono impostati). Ma se accedo da una console di testo (ctrl +alt +F1 ) o eseguire manualmente bash -l dall'emulatore di terminale, .bash_profile funziona bene.

Mi sbaglio quando penso che .bash_profile dovrebbe essere originato all'avvio di X e tutte le export 'ed vars dovrebbe essere disponibile nel terminale, in esecuzione da X?

PS Mettere tutto in .bashrc e reperirlo da .bash_profile non è una buona idea (https://stackoverflow.com/questions/902946/):il materiale ambientale dovrebbe essere reperito solo una volta.

Risposta accettata:

Il file ~/.bash_profile viene letto da bash quando è una shell di accesso. Questo è ciò che ottieni quando accedi in modalità testo.

Quando accedi sotto X, gli script di avvio vengono eseguiti da /bin/sh . Su Ubuntu e Mint, /bin/sh è dash, non bash. Dash e bash hanno entrambi le stesse funzionalità di base, ma dash si attiene a queste funzionalità di base per essere veloce e piccolo, mentre bash aggiunge molte funzionalità a costo di richiedere più risorse. È comune utilizzare dash per gli script che non richiedono le funzionalità extra e bash per l'uso interattivo (sebbene zsh abbia molte funzionalità più interessanti).

La maggior parte delle combinazioni di display manager (il programma in cui si digita il nome utente e la password) e l'ambiente desktop legge ~/.profile dagli script di accesso in /etc/X11/Xsession , /usr/bin/lightdm-session , /etc/gdm/Xsession o qualunque sia applicabile. Quindi inserisci le definizioni delle variabili di ambiente in ~/.profile . Assicurati di utilizzare solo la sintassi supportata da dash.

Allora cosa dovresti mettere dove?

  • Un buon .bash_profile carica .profile e carica .bashrc se la shell è interattiva.

    . ~/.profile
    if [[ $- == *i* ]]; then . ~/.bashrc; fi
    
  • In .profile , inserisci le definizioni delle variabili di ambiente e altre impostazioni di sessione come ulimit .

  • In .bashrc , inserisci le impostazioni interattive di bash come alias, funzioni, completamento, associazioni di tasti (che non sono in .inputrc ), …
Correlati:Debian 9:Dopo l'aggiornamento da 8, MySQL (MariaDB) non funziona più?
Linux
  1. Perché l'espressione regolare funziona in X ma non in Y?

  2. Perché lo script Bash non riconosce gli alias?

  3. Perché "sudo Su" in uno script di shell non esegue il resto dello script come root?

  4. Il Bash '?

  5. Se i processi ereditano l'ambiente del genitore, perché abbiamo bisogno dell'esportazione?

.bashrc vs .bash_profile

Perché il prompt di Bash viene disturbato quando sfoglio la cronologia??

Lo scopo di .bashrc e come funziona?

Perché `zip` in un ciclo For funziona quando il file esiste, ma non quando non lo è?

Perché Cryptkeeper non funziona in 12.04?

Come funziona il pattern <( cmd ) in bash?