.bashrc non eseguito all'apertura di un nuovo terminale


84

Il codice in .bashrc non viene eseguito quando apro una nuova finestra di terminale in Ubuntu 12.04. Ho notato questo durante la creazione di un file .bash_aliases. Gli alias non si sono presentati quando ho aperto un nuovo terminale. Tuttavia quando ho digitato source .bashrcgli alias sono stati mostrati.

.bashrc dovrebbe essere eseguito ogni volta che apro una nuova finestra del terminale, giusto?

Come posso farlo accadere?


Prova invece .profile.
jippie,

4
@jippie No, .profileviene letto al momento del login, non quando si apre un nuovo terminale, a meno che non ci sia una configurazione errata da qualche parte. Selah: hai cambiato qualcosa dalla configurazione predefinita? Eseguire ps -o command $$ $PPIDin un terminale e copiare e incollare l'output.
Gilles,

1
Solo per essere sicuro che tu stia inserendo la .bashrctua cartella home, giusto?
Jjed,

Potrebbe voler controllare echo $SHELL. Questo è successo a me e la shell era / bin / sh invece di bash. Risolvilo in / etc / passwd e il suo .bashrc in esecuzione.
Joe Flynn,

Risposte:


129

Non è necessariamente eseguito; nella parte superiore dello standard .bashrc c'è questo commento:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Credo che ci sia un'opzione per eseguire il terminale bash come shell di login o meno. Con Ubuntu, gnome-terminal normalmente non funziona come shell di login, quindi .bashrc dovrebbe essere eseguito direttamente.

Per le shell di login (come i terminali virtuali), normalmente il file ~/.profileviene eseguito, a meno che tu non abbia uno ~/.bash_profileo ~/.bash_login, ma non ci sono per impostazione predefinita. Per impostazione predefinita, Ubuntu utilizza solo .profile.

Lo standard ~/.profileha questo in esso:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Questo esegue .bashrc se è disponibile, supponendo che $ BASH_VERSION sia presente nel tuo ambiente. Puoi verificarlo inserendo il comando echo $BASH_VERSIONe dovrebbe visualizzare alcune informazioni sul numero di versione - non dovrebbe essere vuoto.


4
Dopo aver compreso queste istruzioni, sono entrato nella mia applicazione terminale e sono andato a modificare -> preferenze profilo -> Titolo e comando -> Esegui comando come shell di accesso. Ho deselezionato questo. Grazie per l'aiuto.
Selah

Puoi chiarire quando .profile (quindi .bashrc) viene caricato / letto? Sembra che ciò avvenga quando gli utenti accedono alla loro sessione desktop. La risposta suggerisce che ciò si verifica quando si avvia una nuova sessione terminale / shell "Per le shell di accesso (come i terminali virtuali), normalmente viene eseguito il file ~ / .profile ..."
riccio

4
Normalmente viene eseguito quando si avvia una nuova shell di accesso (in realtà non una sessione desktop, poiché è possibile eseguire una nuova shell di accesso dalla sessione desktop). Come ho già detto, viene eseguito per impostazione predefinita, ma non se hai creato ~/.bash_profileo ~/.bash_login. È possibile eseguire il test selezionando o deselezionando la casella di controllo in Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, ed uscire quindi rieseguire il terminale. Potresti fare eco a qualcosa da .profile da testare.
Marty Fried,

@Selah Il tuo commento mi ha aiutato più della risposta effettiva;) grazie mille per aver reso il commento!
Aleks,

Quindi, se hai creato ~/.bash_profileo ~/.bash_loginsul tuo sistema e vuoi mantenerli, ma vuoi ancora ~/.profilee da lì ~/.bashrceseguito, puoi procurartelo dal tuo ~/.bash_profileo ~/.bash_logincon una riga contenente source "$HOME/.profile". Restituisce l'output colorato di ls anche nelle shell di login!
tanius

26

Nel mio caso, semplicemente .bashrcmancavano le righe del caricatore.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

L'ho aggiunto manualmente e ha funzionato con il mio nuovo login


3
.bash_profile? Ubuntu utilizza un .profilepredefinito, non .bash_profile.
muru,

il server ubuntu spesso non raccoglie .bashrc ... sopra funziona così ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Carica l'impostazione predefinita
Scott Stensland

Questo mi ha risolto! Ho aggiunto pcree sembra che abbia sovrascritto il profilo bash invece di aggiungerlo.
Shapiro Yaacov,

7

.bash_profilecontiene la configurazione per la shell bash. Quando si apre un terminale, viene prima letto ed eseguito i comandi da ~/.bash_profile. Quindi è possibile aggiungere quanto segue .bash_profileper configurare la shell in base a bashrc.

. ~/.bashrc

A meno che il tuo terminale non stia eseguendo una shell di login (che non è di default in Ubuntu), ~/.bash_profilenon verrà letto (e non esiste di default in Ubuntu)
muru,

5

Se $BASH_VERSIONnon è impostato, provare a utilizzare il chshcomando per impostare la shell /bin/bash.

Ho avuto un problema simile con 12.04 LTS e si è scoperto che il nuovo account utente aveva la shell predefinita impostata /bin/sh, che era la causa del problema.


Questa era la ragione!
mulya,

1

Accodando al commento in .profile

~ / .profile: eseguito dall'interprete dei comandi per login shells.¬ 11 Questo file non viene letto da bash (1), se ~ / .bash_profile o ~ / .bash_login¬ 10 # esiste

Quindi eccoti, se ~/.bash_profileo ~/.bash_login exists, quelli verranno eseguiti invece di~/.profile

se si desidera eseguire ~/.bashrcsolo aggiungere la riga source ~/.bashrcinbash_profile


1
Ho riscontrato lo stesso identico problema. La mia .bashrcera in fase di provenienza fino a quando ho creato un .bash_profilefile. Quindi ho anteposto la source ~/.bashrc riga al mio .bash_profilefile.
Lashae,

0

Invece di fare tutto ciò basta andare Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"e nella casella di comando personalizzata scrivere bashe chiuderlo. La prossima volta che aprirai il terminale, funzionerà anche in modo automatico.


A quale interfaccia grafica ti riferisci? gnomo o unità
Nic Wanavit,
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.