Se apporto modifiche a .bashrc
, come posso ricaricarlo senza disconnettersi e riconnettersi?
Se apporto modifiche a .bashrc
, come posso ricaricarlo senza disconnettersi e riconnettersi?
Risposte:
Devi solo inserire il comando:
source ~/.bashrc
oppure puoi usare la versione più breve del comando:
. ~/.bashrc
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.
Oppure potresti usare:
exec bash
Questo fa la stessa cosa ed è più facile da ricordare (almeno per me).
Il exec
comando 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).
source .bashrc
comando e exec bash
?
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 exec
comando sostituisce la shell con un determinato programma, nel tuo esempio sostituisce la shell con bash (con i file di configurazione aggiornati)
. ~/.bashrc
verrà eseguito dash
anziché anziché bash
, quindi c'è un errore perché shopt
manca. source
non viene trovato dalla shell, quindi anche quella soluzione è fuori. Ho provato questo e l'immagine docker è stata realizzata senza problemi!
source ~/.bashrc
conserverà l' intero ambiente della shell (anche se probabilmente modificato dall'approvvigionamento di ~/.bashrc
), mentre exec bash
conserverà 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.
exec bash
. Il exec
comando sostituisce la shell con il programma, nel nostro caso, bash. Quindi, c'è sempre un'istanza di bash esistente nel terminale.
Per integrare e contrastare le due risposte più popolari . ~/.bashrc
e exec bash
:
Entrambe le soluzioni si ricaricano efficacemente~/.bashrc
, ma ci sono differenze:
. ~/.bashrc
o source ~/.bashrc
sarà preservare la shell corrente :
~/.bashrc
nella 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).
A seconda delle esigenze, potrebbe essere preferito l'uno o l'altro approccio.
[1] exec bash
potrebbe 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 $BASH
contiene 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.
exec $BASH
verrà generato ~/.bashrc
, quindi vedrai le sue modifiche all'ambiente shell nella nuova sessione.
Qualcuno ha modificato la mia risposta per aggiungere un inglese errato, ma qui c'era l'originale, che è inferiore alla risposta accettata.
. .bashrc
~/
, ma poiché la risposta principale mostra entrambi source ~/.bashrc
e . ~/.bashrc
mi chiedo se questa risposta debba essere semplicemente eliminata come ridondante.
A seconda del tuo ambiente, basta digitare
bash
può anche funzionare.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
comando sostituisce la shell con un determinato programma ... - WhoSayIn
exec bash
eredita ancora l'ambiente della shell corrente. exec env -i bash
sarebbe più vicino (o exec env -i bash -l
se si è attualmente in una shell di accesso).
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 ~/.bashrc
ogni 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 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.bashrc
fatto 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 ~/.bashrc
file.
Sul mio server, questo si trovava in /home/your_username/.bashrc
(dove si your_username
trova effettivamente il nuovo nome utente che hai creato sopra, e ora accedi con)
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;
Per me ciò che funziona quando cambio il PERCORSO è: exec "$BASH" --login
~/.bashrc
, che non--login
verrà ricaricata (direttamente); a livello di utente, verrà ricaricato (o o ) invece. ~/.bash_profile
~/.bash_login
~/.profile
genere:
source ~/.bashrc
o, in forma più breve:
. ~/.bashrc
.bashrc
si trova. Un modo più corretto per farlo, come detto nella risposta accettata, è source ~/.bashrc
.
io uso il seguente comando su msysgit
. ~/.bashrc
versione più corta di
source ~/.bashrc
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
Ho notato che il exec bash
comando puro preserverà le variabili di ambiente, quindi è necessario utilizzare exec -c bash
per 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.
personalmente
alias ..='source ~/.bashrc'
nel mio bashrc, in modo che io possa semplicemente usare ".." per ricaricarlo.
..
come alias per cd ..
, quindi sarà molto confuso.
alias rehash='source ~/.bashrc'
è la mia scelta.
export PATH=$PATH:foo
e poi la cambi inexport PATH=$PATH:bar
. Se esegui l'accesso e esci, solobar
sarà nel PERCORSO, ma se fai ciò che suggerisci, entrambifoo
ebar
saranno nel PERCORSO. Conosci un modo per aggirare questo?