Bash non carica '.profile' in una nuova sessione su Linux


22

Sto configurando una nuova macchina Linux che ho ricevuto dal nostro reparto IT e .profileho notato che non viene caricato quando avvio una nuova sessione di terminale. La shell corrente è Bash , anche se l'ho cambiata dallo sh predefinito fornito. Come faccio a caricarlo .profileall'avvio?

Accede shell tramite SSH : ssh myusername@remotemachine. Ho i privilegi di amministratore su di esso.


Mostraci il tuo comando che usi per avviare la tua shell.
Nifle

Risposte:


24

Quando Bash si avvia come shell di accesso interattiva, uno dei file che può essere elaborato è ~/.profile.

Quando inizia come shell interattiva non di accesso, non funziona. Elabora /etc/bash.bashrc(se quel file o un file simile è abilitato nella tua versione di Bash) e ~/.bashrc.

È possibile aggiungere quanto segue al proprio ~/.bashrc(ma fare attenzione a loop o valori che vengono modificati inavvertitamente):

. $HOME/.profile

8
Se hai intenzione di avere la tua fonte .bashrc il tuo .profile (che non ti consiglio) dovresti avere una certa protezione contro il doppio approvvigionamento. Imposta una variabile di guardia o giù di lì [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka

2
Sì, non lo consiglio nemmeno davvero.
In pausa fino a nuovo avviso.

12
Una shell di login proverà ~ / .bash_profile, ~ / .bash_login e ~ / .profile in ordine e aprirà solo il primo che trova.
Beano,

3
Come altri hanno già detto, questo NON è raccomandato, poiché il solito modo è per il profilo e gli "amici" (.bash_profile) di procurarsi .bashrc, e non viceversa. È possibile che il programma terminale NON sia una shell di accesso, ma una shell interattiva non di accesso. Spesso c'è una preferenza che puoi impostare: rendila una shell di accesso per ottenere .profile, .login e / o .bash_profile da eseguire.
rholmes,

15

Dipende da come inizi la tua shell. Come altri hanno già detto, una shell di login caricherà il tuo profilo (cercherà prima .bash_profile, quindi proverà .profile). Se trova uno di questi, li carica. Una shell senza login (interattiva o non interattiva) genererà .bashrc.

Suggerirei di inserire tutto in .bashrc. La divisione .profile / .bashrc era in qualche modo arbitraria e aveva più senso ai vecchi tempi di UNIX quando tty non era solo un nome di dispositivo e significava un vero TeleType. Doveva avviare alcune cose (come il controllo della posta) sul login 'principale' su un server, e solo cose di configurazione normale per altre shell. Nella maggior parte dei Linux accederai ora, non stai davvero accedendo a una shell, poiché stai accedendo a qualche interfaccia grafica (KDE, gnome, CDE 'shudder'). I "processi di login di spawn" sono ora curati dal gestore della sessione. Ora è molto meno rilevante.

Il mio consiglio: rendi il tuo .profile composto esclusivamente da:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

come prima riga di .bashrc, fai attenzione a cose strane che accadono quando esegui uno script bash saltando fuori presto:

[[ $- != *i* ]] && return

5
.profiledovrebbe essere mantenuto bash agnostico. Suggerisco di configurare .bash_profileper caricare .profilee quindi caricare .bashrc. metti solo roba agnostica bash .profile, come PATHe LC_*roba del genere. Metti il ​​resto .bashrc.
lesmana,

@Rich Homolka Perché [-f $ HOME / .bashrc] è due volte al tuo comando? In che modo il comando che hai pubblicato è diverso da solo '. $ HOME / .bashrc '?
David Doria,

1
Protip: non inserire nulla nel tuo .bashrc che scriva su stdout o stderr, in quanto ciò potrebbe interrompere i client non interattivi per cose come SCP. Le cose con output (ad esempio, mi piace essere accolto con un biscotto della fortuna e tempo di attività) dovrebbero andare solo in .profile / .bash_profile
Brian A. Henning

@Lotharyx true. Avevamo un kshrc standard che veniva esportato in stdout, scoppiando Xserver (colibrì in eccesso)
Rich Homolka
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.