Come ricaricare .bashrc senza disconnettersi e riconnettersi?


Risposte:


2638

Devi solo inserire il comando:

source ~/.bashrc

oppure puoi usare la versione più breve del comando:

. ~/.bashrc

88
Questo non è esattamente lo stesso del login e del backout. Supponi di avere la seguente riga in .bashrc:, export PATH=$PATH:fooe poi la cambi in export PATH=$PATH:bar. Se esegui l'accesso e esci, solo barsarà nel PERCORSO, ma se fai ciò che suggerisci, entrambi fooe barsaranno nel PERCORSO. Conosci un modo per aggirare questo?
HighCommander4

7
@ HighCommander4 - un modo molto insoddisfacente di fare quello che vuoi è fare "bash -l", ma in realtà questo crea una nuova subshell e quando esci tornerai alla shell che racchiude "pippo" è ancora in PERCORSO. Se sei solo interessato a PATH, potresti "disinserire PATH" e ricostruirlo da zero, ma probabilmente più facile / sicuro è fare "PATH = / bin: / usr / bin" prima di acquistare il tuo .bashrc. Il modo in cui la variabile PATH è costruita al momento dell'accesso è in realtà ragionevolmente complessa, implicando almeno l'input dal login (vedi "man login") e / etc / profile (vedi "man bash").
George Hawkins,

2
@Alex puoi automatizzarlo aggiungendo la linea ~ / .bashrc in ~ / .bash_profile, anche se non so se questa è una buona pratica.
Vivek Gani,

4
Vorrei anche raccomandare di creare un alias (che è possibile memorizzare in ~ / .bashrc o ~ / .bash_aliases) che apre .bashrc e lo ricarica dopo la chiusura dell'editor. Puoi farlo dalla combinazione di due comandi in un alias, ad esempio in questo modo (se vim è il vostro editor preferito, altrimenti scambiare fuori per qualcos'altro): alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Ciò renderà la modifica molto più agevole, poiché non è necessario pensare alla ricarica, dopo aver effettuato la modifica, se si utilizza l'alias personalizzato.
Samuel Lampa,

6
Interesserà solo il terminale corrente.
matepal297,

284

Oppure potresti usare:

exec bash

Questo fa la stessa cosa ed è più facile da ricordare (almeno per me).

Il execcomando sostituisce completamente il processo di shell eseguendo la riga di comando specificata. Nel nostro esempio, sostituisce qualunque sia la shell corrente con una nuova istanza di bash(con i file di configurazione aggiornati).


13
Potresti per favore spiegare la differenza di source .bashrccomando e exec bash?
Muradin,

18
@muradin, sourceè un comando shell incorporato che esegue il contenuto del file passato come argomento, nella shell corrente . Quindi, nel tuo esempio, esegue il file .bashrc nella shell corrente. E il execcomando sostituisce la shell con un determinato programma, nel tuo esempio sostituisce la shell con bash (con i file di configurazione aggiornati)
WhoSayIn

3
Nella mia circostanza iper-specifica, questo è totalmente scosso. Il mio Dockerfile esegue uno script di installazione che modifica .bashrc. Ho quindi bisogno di ricaricare, ma . ~/.bashrcverrà eseguito dashanziché anziché bash, quindi c'è un errore perché shoptmanca. sourcenon viene trovato dalla shell, quindi anche quella soluzione è fuori. Ho provato questo e l'immagine docker è stata realizzata senza problemi!
m59,

9
Elegante, ma "fa la stessa cosa" non è del tutto corretto. source ~/.bashrcconserverà l' intero ambiente della shell (anche se probabilmente modificato dall'approvvigionamento di ~/.bashrc), mentre exec bashconserverà solo le variabili di ambiente della shell corrente (eventuali modifiche ad hoc della shell corrente in termini di variabili della shell, funzione, opzioni andranno perse). A seconda delle esigenze, potrebbe essere preferito l'uno o l'altro approccio.
mklement0,

12
@SEoF, quando dici "bash inception" e se stai pensando a quello che penso tu stia pensando, devo dire che ti sbagli. A differenza del film, non continui ad entrare in bash da bash quando lo fai ripetutamente exec bash. Il execcomando sostituisce la shell con il programma, nel nostro caso, bash. Quindi, c'è sempre un'istanza di bash esistente nel terminale.
John Red,

121

Per integrare e contrastare le due risposte più popolari . ~/.bashrce exec bash:

Entrambe le soluzioni si ricaricano efficacemente~/.bashrc , ma ci sono differenze:

  • . ~/.bashrco source ~/.bashrcsarà preservare la shell corrente :

    • Ad eccezione delle modifiche apportate al ricaricamento ~/.bashrcnella shell corrente ( sourcing ), vengono mantenute la shell corrente e il suo stato , che include variabili di ambiente, variabili di shell, opzioni di shell, funzioni di shell e cronologia dei comandi.
  • exec bash, o, più efficacemente, exec "$BASH"[1] , sostituirà la tua shell corrente con una nuova istanza, e quindi manterrà solo le variabili di ambiente della tua shell corrente (comprese quelle che hai definito ad hoc).

    • In altre parole: qualsiasi modifica ad hoc della shell corrente in termini di variabili della shell, funzioni della shell, opzioni della shell, cronologia dei comandi viene persa.

A seconda delle esigenze, potrebbe essere preferito l'uno o l'altro approccio.


[1] exec bashpotrebbe in teoria eseguire un eseguibile diverso bash da quello che ha avviato la shell corrente, se si trova in una directory elencata in precedenza in $PATH. Poiché la variabile speciale $BASHcontiene sempre l'intero percorso dell'eseguibile che ha avviato la shell corrente, exec "$BASH"è garantito l'utilizzo dello stesso eseguibile.
Una nota "..."in merito $BASH: la doppia virgoletta garantisce che il valore della variabile venga utilizzato così com'è, senza interpretazione di Bash; se il valore non ha spazi incorporati o altri metacaratteri della shell (che non è probabile in questo caso), non è strettamente necessario virgolette doppie, ma usarle è una buona abitudine da formare.


Hai risposto alla mia domanda prima che potessi farla. Questo è buono a sapersi; Ho spesso impostato il mio CLASSPATH per una singola sessione.
pesce suino

Quindi, anche se chiamo exec "$ BASH", le variabili che .bashrc imposta saranno trovate nella shell che aprirò successivamente (usando lo stesso eseguibile della mia sessione corrente)?
nitinr708

3
@ nitinr708: Sì, exec $BASHverrà generato ~/.bashrc, quindi vedrai le sue modifiche all'ambiente shell nella nuova sessione.
mklement0

@ Gaming32, apprezzo l'idea di una nota a piè di pagina ipertestuale, ma in realtà non ha funzionato (e in una risposta breve come questa, non è poi così importante).
mklement0

44

Qualcuno ha modificato la mia risposta per aggiungere un inglese errato, ma qui c'era l'originale, che è inferiore alla risposta accettata.

. .bashrc

25
Funzionerà solo se la tua directory attuale è in realtà la tua home directory. Funzionerà quanto segue:. ~ / .bashrc
Brian Showalter

6
Cosa fa funzionare questo? Cosa sta realmente accadendo quando faccio ".bashrc"? Grazie!
Jed Daniels,

54
. è una scorciatoia BASH per il comando incorporato "source". Quindi ". .Bashrc" è uguale a "source .bashrc" per l'interprete BASH.
Brian Showalter,

7
Freddo. Grazie. Ora che non lo sapevo.
Jed Daniels,

2
Ho appena inviato una richiesta di modifica da aggiungere ~/, ma poiché la risposta principale mostra entrambi source ~/.bashrce . ~/.bashrcmi chiedo se questa risposta debba essere semplicemente eliminata come ridondante.
Max Ghenis,

18

A seconda del tuo ambiente, basta digitare

bash

può anche funzionare.


15
Tuttavia, questo invocherà una nuova shell all'interno di quella corrente, sprecando così risorse. Meglio usare la soluzione exec di WhoSayln @ che sostituisce la shell corrente con quella appena invocata.
Bernhard Wagner il

si, basta usare la fonte. Questo è del tutto inutile e fastidioso.
dylnmc,

Oltre al commento di @ BernhardWagner, perderai anche la tua storia bash attuale se
genererai

Questa è una buona soluzione per cui l'accesso ai privilegi dell'utente è limitato.
Tunde Pizzle,

invocare un sottoprocesso aggiunge un livello di complessità che non ha alcun valore aggiuntivo.
Alan Berezin il

18

Con questo, non dovrai nemmeno digitare "source ~ / .bashrc":

Includi il tuo file bashrc:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Ogni volta che vuoi modificare il tuo bashrc, esegui semplicemente l'alias " rc "



5

A seconda del proprio ambiente, è possibile aggiungere script per caricare automaticamente .bashrc quando si apre una sessione SSH. Di recente ho eseguito una migrazione a un server che esegue Ubuntu e lì, .profile, non .bashrc o .bash_profile è caricato per impostazione predefinita. Per eseguire qualsiasi script in .bashrc, ho dovuto eseguire source ~/.bashrcogni volta che veniva aperta una sessione, il che non aiuta quando si eseguono distribuzioni remote.

Per caricare automaticamente .bashrc all'apertura di una sessione, prova ad aggiungere questo a .profile:

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

Riapri la sessione e dovrebbe caricare tutti i percorsi / script presenti in .bashrc.


Ho questo in ".profile" ma non funziona - ogni volta che esco, devo farlo a mano. Eventuali suggerimenti?
Wayne Smallman,

4

Ho usato easyengine per configurare il mio server basato su cloud vultr.
Ho trovato il mio file bash su /etc/bash.bashrc.

Così ha source /etc/bash.bashrcfatto il trucco per me!

aggiornare

Quando si configura un server nudo (ubuntu 16.04), è possibile utilizzare le informazioni di cui sopra, quando non si è ancora impostato un nome utente e si accede tramite root.

È meglio creare un utente (con privilegi sudo) e accedere come questo nome utente.
Questo creerà una directory per le tue impostazioni, inclusi i file .profile e .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

Ora, modificherai e (e "sorgente") il ~/.bashrcfile.

Sul mio server, questo si trovava in /home/your_username/.bashrc
(dove si your_usernametrova effettivamente il nuovo nome utente che hai creato sopra, e ora accedi con)


4

exec bash è un ottimo modo per rieseguire e lanciare una nuova shell per sostituire corrente. solo per aggiungere alla risposta, $ SHELL restituisce la shell corrente che è bash. Usando quanto segue, ricaricherà la shell corrente e non solo bash.

exec $SHELL -l;


3

Per me ciò che funziona quando cambio il PERCORSO è: exec "$BASH" --login


La domanda riguarda la ricarica ~/.bashrc, che non--login verrà ricaricata (direttamente); a livello di utente, verrà ricaricato (o o ) invece. ~/.bash_profile~/.bash_login~/.profile
mklement0

3

genere:

source ~/.bashrc

o, in forma più breve:

. ~/.bashrc


1
Ancora una volta, funziona solo se ci si trova nella directory home o, più precisamente, nella directory in cui .bashrcsi trova. Un modo più corretto per farlo, come detto nella risposta accettata, è source ~/.bashrc.
John Red,

2

io uso il seguente comando su msysgit

. ~/.bashrc

versione più corta di

source ~/.bashrc

@jwg è la risposta accettata. .bashrc. funzionerà solo se ti trovi nella directory home su msysgit.
Sojan V Jose,

@jwg ok, ho detto che non è necessario digitare 'source ~ / .bashrc' invece usare la versione più breve.
Sojan V Jose,

@jwg okay l'ho aggiunto come modifica alla risposta originale :)
Sojan V Jose

Perché la risposta ridondante @Sojan?
nitinr708

@ nitinr708 2014. ricordo a malapena: P. la risposta originale è stata modificata in seguito qualcosa, suppongo.
Sojan V Jose,

2

Supponendo una shell interattiva, e si desidera mantenere la cronologia dei comandi corrente e anche caricare / etc / profile (che carica i dati di ambiente inclusi / etc / bashrc e su Mac OS X carica i percorsi definiti in /etc/paths.d/ via path_helper), aggiungi la cronologia dei tuoi comandi ed esegui un exec di bash con l'opzione login ('-l'):

history -a && exec bash -l

1

Questo funzionerà anche ..

cd ~
source .bashrc

7
Lo fa, ma cambia anche la directory di lavoro in ~, che non è desiderata.
Albin,

1
Grazie per mantenere vivo il contesto @Krinkle
nitinr708

È necessario specificare ~di cambiare la directory di lavoro nella home directory dell'utente?
Kenly,

1

Ho notato che il exec bashcomando puro preserverà le variabili di ambiente, quindi è necessario utilizzare exec -c bashper eseguire bash in un ambiente vuoto.

Ad esempio, si accede a un bash e export A=1, se si exec bash, il A == 1.

Se tu exec -cl bash, Aè vuoto.

Penso che questo sia il modo migliore per fare il tuo lavoro.


-2

personalmente

alias ..='source ~/.bashrc'

nel mio bashrc, in modo che io possa semplicemente usare ".." per ricaricarlo.


4
Molte persone usano ..come alias per cd .., quindi sarà molto confuso.
Il padrino,

fatta eccezione per il nome dell'alias una buona idea. alias rehash='source ~/.bashrc'è la mia scelta.
Frank Nocke,

usare qualcosa come "_rs" che uso per ricaricare la shell. praticamente uso _ per iniziare i miei alias; che è simile a js libs underscorejs o lodash.
Jimmy MG Lim,
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.