Perché non funziona .bashrc automaticamente?

176

Ho inserito alcuni comandi alias nel mio file .bashrc , in modo che possano essere caricati ogni volta che apro una nuova finestra di Terminale. Eppure questo non succede.

Devo selezionare run script: nel Terminale > Preferenze > " MyDefaultTheme " > Shell prefpane e aggiungere: source .bashrc && clear perché funzioni ...

Questo sembra strano dato che molti tutorial dicono solo che devi solo aggiungere al file .bashrc e tutto va bene.

Nota che non corro in bash quando uso il terminale, mi piace l'altro (predefinito) uno (non so cosa sia) migliore, perché mi mostra dove sono sempre io ad esempio:

>>d54c6b47b:~ romeo$

invece di:

>>bash$

In bash tutto è caricato come dovrebbe essere.

Quindi la mia domanda è: perché il mio .bashrc non si carica automaticamente e devo aggiungere l'opzione per chiamarlo ogni volta?

Anche alcuni tutorial mi hanno detto di fare qualcosa di simile:

$alias la=’ls -la’ >> ~/.bashrc

che dovrebbe scrivere l'alias sul mio .bashrc , questo non funziona neanche ...

Nota che sono un principiante UNIX, quindi sii gentile.

    
posta romeovs 27.04.2011 - 23:08
fonte

13 risposte

85

Inseriscilo nel tuo file .profile dalla tua directory home e dovrebbe funzionare la prossima volta che avvii una nuova shell o dopo aver eseguito source ~/.profile

Questo link indica chiaramente l'ordine in cui i file di avvio vengono letti e caricati dalla shell: link

    
risposta data 28.04.2011 - 00:47
fonte
197

Ci sono stato, fatto quello. Quello di cui sono venuto a conoscenza, OS X non legge il file .bashrc su bash start. Invece, legge i seguenti file (nel seguente ordine):

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

Vedi anche commento informativo e utile di Chris Johnsen :

By default, Terminal starts the shell via /usr/bin/login, which makes the shell a login shell. On every platform (not just Mac OS X) bash does not use .bashrc for login shells (only /etc/profile and the first of .bash_profile, .bash_login, .profile that exists and is readable). This is why "put source ~/.bashrc in your .bash_profile" is standard advice

I di solito metto solo le cose che normalmente mettere in ~/.bashrc in ~/.profile - ha funzionato fino ad ora come un incantesimo.

    
risposta data 28.04.2011 - 01:53
fonte
24

Metto tutto in ~/.bashrc e solo source ~/.bashrc in .profile.

Questo consente alle sessioni screen e xterm (e indovina tmux) di ereditare il mio ambiente come sessioni non di login solo eseguite .bashrc , mentre le sessioni di login (es. terminale o iTerm) eseguono solo .profile .

    
risposta data 28.04.2011 - 04:11
fonte
16

Ci sono due scenari:

  1. Stai utilizzando Linux
  2. Stai utilizzando Mac Os X

Per entrambi, vuoi che venga importato ~/.bashrc nel tuo profilo che viene caricato, o di provenienza, quando inizia la shell per il tuo terminale.

Linux

In Linux, ~/.profile è automaticamente sorgente nella shell quando viene avviata. Quindi, se vai al tuo terminale e digita cd ~; ls -A , vedrai tutti i tuoi file e directory nella tua home directory ( /home/usrname/ ). Dovresti vedere un file chiamato .profile . Questo è il file che viene automaticamente "acquisito" all'avvio del terminale.

Se vuoi aggiungere alias e funzioni a ~/.bashrc (che è quello che faccio), allora dovresti (all'interno di ~/.profile aggiungere un'istruzione if che controlli se ~/.bashrc è un file non vuoto e poi fonte.

Per verificare se il tuo ~/.profile lo fa già, inserisci nano ~/.profile . Questo lo aprirà in un editor di testo (puoi usare gedit se sai di averlo o addirittura se sai come usarlo). Si può ottenere un file di testo vuoto (non si dovrebbe), ma se si procede semplicemente. Se non vedi una linea ovunque che dice source ~/.bashrc , quindi inserisci le seguenti righe da qualche parte (mettila in un posto ragionevole come alla fine o all'inizio e non nel mezzo di un'istruzione if) :

if [ -s ~/.bashrc ]; then
    source ~/.bashrc;
fi

Controlla se ~/.bashrc è un file non vuoto (con if [ -s ~/.bashrc ] ), e se è tale, lo invia. Abbastanza semplice. Ora puoi aggiungere qualsiasi alias, funzione, variabile, ecc. Validi a ~/.bashrc .

MAC OS X

Per impostazione predefinita, sorgenti Max OS X ~/.bash_profile . Per poter aggiungere cose a ~/.bashrc (che è, ancora, quello che faccio in OS X, pure), allora segui la stessa procedura di Linux. Nel terminale inserisci cd ~; nano .bash_profile . Controlla la riga che dice source ~/.bashrc e, in caso contrario, aggiungi l'istruzione if precedente ( if [ -s ~/.bashrc ]; then source ~/.bashrc; fi ).

NOTE

Quando scrivi un'istruzione if, assicurati di lasciare spazi tra praticamente tutto (ad esempio if [ -s ~/.bashrc]; then echo "found"; fi non funziona perché non c'è spazio tra ~/.bashrc e ] - l'interprete penserà che questa sia una parola).

Se vuoi capire come controllare le cose in una dichiarazione if migliore, vai al terminale e inserisci man \[ ; questo essenzialmente ti dà la decadenza di un'istruzione if. Ad esempio, if [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fi controlla se /path/to/file è un file e se è stampato su stdout di conseguenza. Faccio sempre riferimento anche a questo per un riferimento più facile e immediato: 7.2. Operatori di test dei file .

Spero che questo aiuti. Ricordo quanto fossi confuso quando ho iniziato tutta questa roba (che non era molto tempo fa); quindi, buona fortuna per i tuoi futuri sforzi UNIX!

    
risposta data 26.09.2014 - 17:45
fonte
10

Sourcing .profile in .bash_profile lo ha fatto per me

echo 'source ~/.profile' >> ~/.bash_profile
    
risposta data 13.10.2012 - 04:37
fonte
6

Ho scoperto che dopo aver installato rvm (auto-installer, nessuna modifica manuale) aveva creato un file ~/.bash_login per se stesso, dove in precedenza non ne avevo mai avuto uno.

Tuttavia, questo significa che il mio ~/.profile setup e alias non sono più stati caricati! Molte scorciatoie sono scomparse. Pensavo che funzionassero in sequenza, non esclusivamente: - /

Ho aggiunto

. ~/.profile 

a ~/.bash_login per concatenare le cose come mi aspettavo.

    
risposta data 28.07.2012 - 14:33
fonte
3

Mettendo ...

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

... in ~/.bashrc , quindi source ~/.bashrc nella mia ~/.bash_profile non ha funzionato per il programma Terminal che viene installato.

Ma poi sono passato al menu a discesa Modifica > Preferenze profilo , scheda Titolo e comando e comando Esegui come shell di accesso dalla sezione comandi di quella pagina.

Dopo averlo fatto, l'avvio di un nuovo terminale mostra il risultato desiderato quando digito

 type rvm|head -1

vale a dire. "rvm è una funzione". Non è andata così finché non ho apportato questa modifica, ed è l'unica modifica che ho apportato dopo le modifiche di .bash_profile e .bashrc descritte in altre risposte qui.

    
risposta data 15.02.2012 - 19:46
fonte
2

Prima di tutto lascia che ti dica che ~/.bashrc è il file che viene eseguito ogni volta che viene richiamata una seconda shell (quando si esegue uno script di shell, ad esempio), e ~/.profile viene richiamato ad ogni accesso.

Quindi ti consiglio di scrivere il comando . ~/.bashrc nel tuo file ~/.profile , e questo comando eseguirà il file bashrc ogni volta che effettuerai il login.

    
risposta data 24.09.2012 - 14:51
fonte
1

Mi sono imbattuto nello stesso problema dopo aver installato rbenv sul mio server remoto (Digital Ocean) Ubuntu 16.04.

In qualche modo ha creato ~/.bash_profile . È lo stesso ~/.bashrc su un sistema OS X.

E Ubuntu ha iniziato a leggere solo ~/.bash_profile , ma non ~/.bashrc come dovrebbe.

Quindi ho eseguito il backup dei miei dati in ~/.bash_profile con questo:

mv ~/.bash_profile ~/.bash_profile.bak

E rinominato il vecchio ~/.bashrc in ~/.bash_profile

mv ~/.bashrc ~/.bash_profile

Ha funzionato per me. Dopo il mio login ssh, ho caricato tutto in ~/.bashrc .

    
risposta data 02.07.2017 - 17:00
fonte
0

Nel caso in cui ciò potrebbe aiutare qualcun altro ...

Assicurati di modificare il giusto file .bashrc per l'utente giusto. Ho avuto un problema simile usando Vagrant. Dopo aver eseguito vagrant ssh il mio file .bashrc non è stato eseguito. La soluzione era semplice in quanto pensavo che vagabondo si connettesse con l'utente di nome vagrant e che stavo effettuando l'accesso come altro utente. Quindi stavo modificando il file .bashrc sbagliato. Dopo aver modificato il file .bashrc corretto, i miei alias sono stati riconosciuti.

    
risposta data 09.04.2018 - 19:18
fonte
-1

A proposito, se hai attivato ZSH, sostituisce bash!

Quindi tutti i file ~/.bashrc non vengono caricati.

Devi impostare i tuoi alias in ~/.zshrc invece.

    
risposta data 05.10.2018 - 11:07
fonte
-2

Per mantenere il login di stile OSX .profile e supportare il normale comportamento bash .bashrc puoi usare un file .bashrc se passi da un normale nix a un OSX fornendo un link simbolico al tuo file .bashrc chiamato %codice%. Assicurati solo che questo file non esista già prima di provarlo, ma è così che lo faccio.

ln -s .bashrc .bash_profile
    
risposta data 03.06.2013 - 22:08
fonte
-2

/ etc / bashrc è per i profili globali su sistemi Mac. È possibile aggiungere: alias ls="ls -G" all'inizio di questo file e il tuo bene, tutti avranno i file e le cartelle colorati sul sistema in modo da non dover impostare nulla in più per ogni singolo utente. Noterai anche insieme a "sudo su -" per eseguire il root da te stesso, ma avrai ancora file e cartelle colorati senza grattacapi aggiuntivi.

Un altro consiglio divertente: quando si utilizza Iterm2 di mac, l'importazione dei profili colore renderà immediatamente la colorazione dei file e delle cartelle in base alla combinazione di colori dopo aver impostato questa opzione "/ etc / bashrc".

    
risposta data 08.09.2016 - 14:39
fonte

Leggi altre domande sui tag