Ecco la motivazione per la domanda:
Sto usando Ubuntu 12.04 LTS 2 con il desktop Unity. Nel mio file .bashrc, aggiungo diverse directory alla mia variabile PATH e definisco alcune variabili d'ambiente, come JAVA_HOME. Quando avvio applicazioni da un terminale (eseguendo bash, la mia shell predefinita), questo funziona alla grande, ma per molte delle scorciatoie che usano il launcher Unity, eseguono app che sembrano essere definite per usare #! / Bin / sh, che è alias / bin / dash e non raccolgono il contenuto di ~ / .bashrc o ~ / .profile.
Suppongo che potrei cambiare tutte queste scorciatoie per usare / bin / bash invece di / bin / sh per forzarlo a raccogliere le modifiche .bashrc, ma questo sembra davvero confuso.
Dato che Ubuntu 12.04 (di default) alias / bin / sh to / bin / dash e che la mia shell predefinita è / bin / bash, c'è un solo posto dove posso scegliere di modificare il PERCORSO e definire le variabili di ambiente se le voglio essere presente in tutte queste circostanze:
- Ogni volta che creo una shell bash senza login (usando il terminale in unità)
- Ogni volta che creo una shell bash di login (ad esempio, il login in remoto tramite ssh)
- Ogni volta che utilizzo un launcher dell'applicazione Unity (dato che il launcher usa / bin / sh).
- Ogni volta che viene eseguito un processo cron (dato che SHELL = / bin / sh in / etc / crontab).
Se capisco correttamente, suppongo che:
- (1) / (2) e (3) / (4) sono diversi perché (1) / (2) sono bash e (3) / (4) sono trattini.
- (1) e (2) sono diversi perché i file che bash sceglie di caricare differiscono a seconda che si tratti o meno di una shell di accesso.
- (3) e (4) sono diversi perché (3) arriverà ad un certo punto dopo che ho effettuato l'accesso (e quindi ~ / .profile sarà stato fornito da uno dei suoi processi padre, mentre (4) arriverà in alcuni punto quando non ho effettuato l'accesso, quindi ~ / .profile non sarà stato letto.
(Non sarei sorpreso se anche altri fattori contano, come se la shell sia interattiva o meno, quindi probabilmente ci sono più combinazioni che non ho nemmeno previsto ... Sono felice di avere la mia domanda "migliorata " in quel caso.)
Mi aspetto che a un certo punto qualcuno debba aver fatto una sorta di guida che ti dice come / dove modificare le variabili di ambiente in modo indipendente dalla shell (o almeno un modo compatibile con dash / bash) ... Posso solo ' non sembra trovare i termini di ricerca giusti per individuare tale guida.
Soluzioni o suggerimenti per soluzioni molto apprezzate!
aggiornato:
- Chiarimento: questo è l'utente Ubuntu predefinito creato dal processo di installazione 12.04, quindi niente di speciale. Si fa avere un ~ / .profile (che esplicitamente le fonti ~ / .bashrc), e l'unico ~ / .bash * file presenti sono .bashrc, .bash_history e .bash_logout ... quindi non c'è nessun .bash_profile.
- Enfasi sull'ambito: non mi interessa davvero alcuna shell diversa dalla shell interattiva predefinita (bash) e qualsiasi script che utilizza / bin / sh (aliasato al trattino), quindi non è necessario complicarlo con qualcosa in più per tcsh / ksh / zsh / etc. supporto.