Bash non carica '.profile' nella nuova sessione su Linux

Aug 16 2010

Sto configurando una nuova macchina Linux che ho ricevuto dal nostro reparto IT e .profileho notato che non viene caricata quando avvio una nuova sessione di terminale. La shell corrente è Bash , anche se l'ho cambiata dalla sh di default con cui era fornita. Come faccio a caricarlo .profileall'avvio?

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

Risposte

24 Pauseduntilfurthernotice. Aug 16 2010 at 14:38

Quando Bash si avvia come una shell di login interattiva, uno dei file che può elaborare è ~/.profile.

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

Puoi aggiungere quanto segue al tuo ~/.bashrc(ma fai attenzione ai loop o ai valori che vengono modificati inavvertitamente):

. $HOME/.profile
16 RichHomolka Aug 16 2010 at 17:28

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

Suggerirei di mettere tutto in .bashrc. La divisione .profile / .bashrc era un po '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 determinate cose (come il controllo della posta) sul login "principale" di un server e solo le normali cose di configurazione per altre shell. Nella maggior parte dei Linux effettuerai il login ora, non stai realmente effettuando il login in una shell, dato che stai accedendo a qualche interfaccia grafica (KDE, gnome, CDE "shudder"). I "processi di accesso allo spawn" sono ora gestiti dal gestore della sessione. È molto meno rilevante adesso.

Il mio consiglio: fai in modo che il tuo .profile sia composto esclusivamente da:

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

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

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