Perché il sorgente di Mac OS X ~ / .bashrc? [duplicare]

84

Ho trovato un sacco di persone che capivano perché un'istruzione simile a questa:

Put X to your ~/.bashrc and you can do Y

non funziona.

Si scopre sempre che i file di avvio di bash di Mac OS X (o Mac's Bash stesso) non generano il file ~ / .bashrc, nella shell di login o in una shell generata da un sistema di finestre, come l'app Terminal in Mac OS X)

Perché è questo, quando tutti gli altri sistemi simili a Unix con Bash con cui ho lavorato prima lo hanno fatto?

PS:

Ho trovato ciò che dice Bash in merito ai file di avvio (che potrebbe essere utile):

When Bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.

Fonte: link

    
posta Paul Brewczynski 03.02.2014 - 13:31
fonte

2 risposte

81

In OSX il terminale per impostazione predefinita avvia una sessione di accesso, quindi legge .bash_profile ecc. (Il processo di accesso alla GUI che richiede il nome e la password non utilizza gli script della shell e non avvia nessuna shell da parte di launchd e dell'area di lavoro)

Su altri Unix xterm esegue una shell di login per default in modo che leggano .bashrc come gli script che ti presentano con la tua password ecc. al login chiama la sessione di login e tutti i terminali sono sotto processo di questo ed ereditano l'ambiente della shell. / p>

Dal documento GNU a cui si fa riferimento

Invoked as an interactive non-login shell

When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force Bash to read and execute commands from file instead of ~/.bashrc.

So, typically, your ~/.bash_profile contains the line

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

after (or before) any login-specific initializations.

    
risposta data 03.02.2014 - 13:42
fonte
19

bash legge solo .bashrc per le shell non di accesso :

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

As Terminal inizia bash come shell di login (esegui w per vedere che le istanze bash vengono eseguite come -bash ), .bashrc non viene mai letto automaticamente.

    
risposta data 03.02.2014 - 13:41
fonte

Leggi altre domande sui tag