In Linux e, per quanto ne so, tutti i sistemi Unix, gli emulatori di terminali eseguono shell interattive senza accesso per impostazione predefinita. Ciò significa che, per bash, la shell avviata:
Quando viene avviata una shell interattiva che non è una shell di accesso, bash legge ed esegue i comandi da
/etc/bash.bashrce~/.bashrc, se questi file esistono. Questo può essere inibito usando l'--norcopzione.L'
--rcfileopzione file forzerà bash a leggere ed eseguire comandi da file anziché/etc/bash.bashrce~/.bashrc.
E per le shell di login:
Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'
--loginopzione, legge innanzitutto ed esegue i comandi dal file/etc/profile, se quel file esiste. Dopo aver letto il file, si cerca~/.bash_profile,~/.bash_logine~/.profile, in questo ordine, e legge ed esegue i comandi dal primo che esiste ed è leggibile.L'
--noprofileopzione può essere utilizzata all'avvio della shell per inibire questo comportamento.
Su OSX, tuttavia, la shell predefinita (che è bash) è stata avviata nel terminale predefinito (Terminal.app) in realtà genera ~/.bash_profileo ~.profileecc. In altre parole, si comporta come una shell di accesso.
Domanda principale : perché la shell interattiva predefinita è una shell di accesso su OSX? Perché OSX ha scelto di farlo? Ciò significa che tutte le istruzioni / tutorial per cose basate su shell che menzionano il cambiamento di cose ~/.bashrcfalliranno su OSX o viceversa ~/.profile. Tuttavia, mentre molte accuse possono essere mosse alla Apple, assumere sviluppatori incompetenti o idioti non è uno di questi. Presumibilmente, avevano una buona ragione per questo, quindi perché?
Domande secondarie: Terminal.app esegue effettivamente una shell di login interattiva o ha cambiato il comportamento di bash? È specifico per Terminal.app o è indipendente dall'emulatore di terminale?