Si j'apporte des modifications à .bashrc
, comment puis-je le recharger sans me déconnecter et me reconnecter?
1645
Il vous suffit de saisir la commande:
source ~/.bashrc
ou vous pouvez utiliser la version plus courte de la commande:
. ~/.bashrc
export PATH=$PATH:foo
puis modifiez-la enexport PATH=$PATH:bar
. Si vous vous connectez et vous déconnectez, seulbar
sera dans le CHEMIN, mais si vous faites ce que vous suggérez, les deuxfoo
etbar
seront dans le CHEMIN. Connaissez-vous un moyen de contourner cela?alias editbashrc='vim ~/.bashrc; source ~/.bashrc'
. Cela rendra l'édition beaucoup plus fluide, car vous n'avez pas besoin de penser au rechargement, après avoir effectué l'édition, si vous utilisez l'alias personnalisé.Ou vous pouvez utiliser:
Cela fait la même chose et est plus facile à retenir (du moins pour moi).
La
exec
commande remplace complètement le processus shell en exécutant la ligne de commande spécifiée. Dans notre exemple, il remplace tout ce que le shell actuel est par une nouvelle instance debash
(avec les fichiers de configuration mis à jour).la source
source .bashrc
commandement etexec bash
?source
est une commande shell intégrée qui exécute le contenu du fichier passé en argument, dans le shell courant . Ainsi, dans votre exemple, il exécute le fichier .bashrc dans le shell actuel. Et laexec
commande remplace le shell par un programme donné, dans votre exemple, elle remplace votre shell par bash (avec les fichiers de configuration mis à jour). ~/.bashrc
je l'exécuteraidash
plutôt quebash
, donc il y a une erreur car elleshopt
est manquante.source
n'est pas trouvée dans le shell, donc cette solution est également sortie. J'ai essayé cela et l'image docker s'est bien construite!source ~/.bashrc
préservera l' intégralité de votre environnement shell (bien que probablement modifié par le sourcing de~/.bashrc
), tandis queexec bash
ne conservera que les variables d'environnement de votre shell actuel (toute modification ad hoc du shell actuel en termes de variables de shell, de fonction, d'options est perdue). Selon vos besoins, l'une ou l'autre approche peut être préférée.exec bash
. Laexec
commande remplace le shell par le programme, dans notre cas, bash. Ainsi, il existe toujours une instance de bash dans le terminal.Pour compléter et contraster les deux réponses les plus populaires,
. ~/.bashrc
etexec bash
:Les deux solutions se rechargent efficacement
~/.bashrc
, mais il existe des différences:. ~/.bashrc
ousource ~/.bashrc
va préserver votre shell courant :~/.bashrc
dans le shell actuel ( sourcing ), le shell actuel et son état sont préservés , ce qui inclut les variables d'environnement, les variables du shell, les options du shell, les fonctions du shell et l'historique des commandes.exec bash
, ou, de façon plus robuste,exec "$BASH"
[1] , remplacera votre shell actuel par une nouvelle instance, et ne conservera donc que les variables d'environnement de votre shell actuel (y compris celles que vous avez définies ad hoc).Selon vos besoins, l'une ou l'autre approche peut être préférée.
[1]
exec bash
pourrait en théorie exécuter un exécutable différentbash
de celui qui a démarré le shell courant, s'il se trouve dans un répertoire répertorié plus haut dans le$PATH
. Étant donné que la variable spéciale$BASH
contient toujours le chemin complet de l'exécutable qui a démarré le shell actuel, ilexec "$BASH"
est garanti d'utiliser le même exécutable.Une note re
"..."
autour$BASH
: des guillemets doubles assure que la valeur de la variable est utilisée en l' état , sans interprétation par Bash; si la valeur n'a pas d'espaces incorporés ou d'autres métacaractères de shell (ce qui n'est probablement pas dans ce cas), vous n'avez pas strictement besoin de guillemets doubles, mais leur utilisation est une bonne habitude pour se former.la source
exec $BASH
sera source~/.bashrc
, donc vous verrez ses changements dans l'environnement shell dans la nouvelle session.Quelqu'un a modifié ma réponse pour ajouter un anglais incorrect, mais voici l'original, qui est inférieur à la réponse acceptée.
la source
~/
, mais comme la réponse du haut montre les deuxsource ~/.bashrc
et. ~/.bashrc
je me demande si cette réponse doit être supprimée car redondante.Selon votre environnement, il suffit de taper
peut également fonctionner.
la source
Avec ça, vous ne même pas à taper "source ~ / .bashrc":
Incluez votre fichier bashrc:
Chaque fois que vous souhaitez modifier votre bashrc, lancez simplement l'alias " rc "
la source
Alternatives
la source
exec bash
hérite toujours de l'environnement du shell actuel.exec env -i bash
serait plus proche (ouexec env -i bash -l
si vous êtes actuellement dans un shell de connexion).Selon votre environnement, vous souhaiterez peut-être ajouter des scripts pour que .bashrc se charge automatiquement lorsque vous ouvrez une session SSH. J'ai récemment effectué une migration vers un serveur exécutant Ubuntu, et là, .profile, pas .bashrc ou .bash_profile est chargé par défaut. Pour exécuter des scripts dans .bashrc, j'ai dû exécuter
source ~/.bashrc
chaque fois qu'une session était ouverte, ce qui n'aide pas lors de l'exécution de déploiements à distance.Pour que votre .bashrc se charge automatiquement lors de l'ouverture d'une session, essayez de l'ajouter au .profile:
Rouvrez votre session et elle devrait charger tous les chemins / scripts que vous avez dans .bashrc.
la source
J'ai utilisé easyengine pour configurer mon serveur basé sur le cloud vultr.
J'ai trouvé mon fichier bash sur
/etc/bash.bashrc
.Le
source /etc/bash.bashrc
truc pour moi aussi!mise à jour
Lors de la configuration d'un serveur nu (ubuntu 16.04), vous pouvez utiliser les informations ci-dessus, lorsque vous n'avez pas encore configuré de nom d'utilisateur et que vous vous connectez via root.
Il est préférable de créer un utilisateur (avec les privilèges sudo) et de se connecter en tant que nom d'utilisateur à la place.
Cela créera un répertoire pour vos paramètres, y compris les fichiers .profile et .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Maintenant, vous allez éditer et (et "source") le
~/.bashrc
fichier.Sur mon serveur, il était situé à
/home/your_username/.bashrc
(où se
your_username
trouve en fait le nouveau nom d'utilisateur que vous avez créé ci-dessus, et connectez-vous maintenant avec)la source
exec bash est un excellent moyen de réexécuter et de lancer un nouveau shell pour remplacer le courant. juste pour ajouter à la réponse, $ SHELL renvoie le shell courant qui est bash. En utilisant ce qui suit, il rechargera le shell actuel, et pas seulement pour bash.
exec $SHELL -l;
la source
Pour moi, ce qui fonctionne lorsque je change de CHEMIN, c'est:
exec "$BASH" --login
la source
~/.bashrc
, qui ne--login
se rechargera pas (directement); au niveau utilisateur, il se rechargera~/.bash_profile
(ou~/.bash_login
ou~/.profile
) à la place.type:
source ~/.bashrc
ou, sous une forme plus courte:
. ~/.bashrc
la source
.bashrc
se trouve. Une manière plus correcte de le faire, comme indiqué dans la réponse acceptée, estsource ~/.bashrc
.j'utilise la commande suivante sur msysgit
version plus courte de
la source
En supposant un shell interactif, et vous souhaitez conserver votre historique de commandes actuel et également charger / etc / profile (qui charge les données d'environnement, y compris / etc / bashrc et sur Mac OS X, charge les chemins définis dans /etc/paths.d/ via path_helper), ajoutez votre historique de commandes et faites un exec de bash avec l'option login ('-l'):
la source
Cela fonctionnera également ..
la source
~
de changer le répertoire de travail en répertoire de base de l'utilisateur?J'ai remarqué que la
exec bash
commande pure préservera les variables d'environnement, vous devez donc utiliserexec -c bash
pour exécuter bash dans un environnement vide.Par exemple, vous vous connectez à un bash et
export A=1
, si vousexec bash
,A == 1
.Si vous
exec -cl bash
,A
c'est vide.Je pense que c'est la meilleure façon de faire votre travail.
la source
j'ai personnellement
alias ..='source ~/.bashrc'
dans mon bashrc, afin que je puisse simplement utiliser ".." pour le recharger.
la source
..
comme aliascd ..
, donc ce sera très déroutant.alias rehash='source ~/.bashrc'
est mon choix.