web-dev-qa-db-fra.com

Comment puis-je recharger .bashrc sans me déconnecter ni me reconnecter?

Si j'apporte des modifications à .bashrc, comment puis-je le recharger sans me déconnecter et y revenir?

1447
Jed Daniels

Vous devez juste entrer la commande:

source ~/.bashrc

ou vous pouvez utiliser la version plus courte de la commande:

. ~/.bashrc
2332
George Hawkins

ou vous pourriez utiliser;

exec bash

fait la même chose. (et plus facile à retenir, du moins pour moi)

exec la commande remplace le shell par un programme donné. Dans notre exemple, elle remplace notre shell par bash (avec les fichiers de configuration mis à jour )

242
WhoSayIn

Pour compléter et contraster les deux réponses les plus populaires, . ~/.bashrc et exec bash :

Les deux solutions effectivement ​​recharger _~/.bashrc_, mais il existe des différences:

  • _. ~/.bashrc_ ou _source ~/.bashrc_ va conserver votre shell actuel :

    • Sauf pour les modifications qui rechargent _~/.bashrc_ dans le shell actuel (sourcing), le shell actuel et son état ​​sont preserve, qui inclut les variables d'environnement, les variables Shell, les options Shell, les fonctions Shell et l'historique des commandes.
  • _exec bash_ ou, plus robuste, _exec "$BASH"_[1], va remplacer votre Shell actuel avec une nouvelle instance, et donc only conservez les variables d'environnement ​​ de votre shell actuel (y compris celles que vous avez définies de manière ad-hoc).

    • En d'autres termes: toutes les modifications ad-hoc apportées au shell actuel en termes de variables shell, les fonctions du shell, les options du shell et l'historique des commandes sont perdus.

Selon vos besoins, l’une ou l’autre approche peut être privilégiée.


[1] _exec bash_ pourrait en théorie exécuter un exécutable différent ​​bash que celui qui a démarré le shell actuel, s'il existe dans un répertoire répertorié précédemment dans la liste _$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, il est garanti que _exec "$BASH"_ utilise l'exécutable same.
Une remarque concernant _"..."_ autour de _$BASH_: les guillemets doubles garantissent que la valeur de la variable est utilisée telle quelle, sans interprétation par Bash; Si la valeur ne contient pas d'espaces imbriqués ou d'autres métacaractères Shell (ce qui est peu probable dans ce cas), vous n'avez pas strictement besoin de guillemets doubles, mais leur utilisation est une bonne habitude à former.

109
mklement0

Quelqu'un a modifié ma réponse pour ajouter un anglais incorrect, mais voici l'original, ce qui est inférieur à la réponse acceptée.

. .bashrc
45
Randy Proctor

En fonction de votre environnement, il suffit de taper

bash

peut aussi travailler.

18
James

Avec cela, vous ne serez pas même devez taper "source ~/.bashrc":

Incluez votre fichier bashrc:

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

Chaque fois que vous voulez éditer votre bashrc, lancez simplement l’alias "rc"

16
Roy Lin
11
Geoffrey Hale

En fonction de 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à-bas, le fichier .profile, pas .bashrc ou .bash_profile, est chargé par défaut. Pour exécuter des scripts dans .bashrc, je devais exécuter source ~/.bashrc chaque fois qu'une session était ouverte, ce qui n'aide pas lors de l'exécution de déploiements distants.

Pour que votre .bashrc soit chargé automatiquement lors de l'ouverture d'une session, essayez d'ajouter ceci à .profile:

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

Rouvrez votre session et il devrait charger tous les chemins/scripts que vous avez dans .bashrc.

5
karolus

Pour moi, ce qui fonctionne quand je change le PATH est: exec "$BASH" --login

3
Cecília Regina

J'ai utilisé easyengine pour configurer mon serveur basé sur le cloud vultr.
J'ai trouvé mon fichier bash à /etc/bash.bashrc.

Alors source /etc/bash.bashrc a fait le tour pour moi!

mettre à 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 défini 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 vous connecter sous ce nom d'utilisateur.
Ceci 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 fichier ~/.bashrc.

Sur mon serveur, il se trouvait à l'adresse /home/your_username/.bashrc
(où your_username est en fait le nouveau nom d'utilisateur que vous avez créé ci-dessus et auquel vous vous connectez maintenant)

3
SherylHohman

type:

source ~/.bashrc

ou, sous forme abrégée:

. ~/.bashrc

2
jwismar

exec bash est un excellent moyen de réexécuter et de lancer un nouveau shell pour remplacer current. Juste pour ajouter à la réponse, $ Shell renvoie le shell actuel qui est bash. En utilisant ce qui suit, il rechargera le shell actuel, et pas seulement bash.

exec $Shell -l;

2
Jimmy M.G. Lim

Cela fonctionnera aussi ..

cd ~
source .bashrc
1
kirti

j'utilise la commande suivante sur msysgit

. ~/.bashrc

version plus courte de

source ~/.bashrc
1
Sojan V Jose

J'ai remarqué que la pure commande exec bash préserve les variables d'environnement. Vous devez donc utiliser exec -c bash pour exécuter bash dans un environnement vide.

Par exemple, vous vous connectez à un bash et export A=1, si vous exec bash, le A == 1.

Si vous exec -cl bash, A est vide.

Je pense que c'est la meilleure façon de faire votre travail.

1
CatDog

En supposant un shell interactif, vous souhaitez conserver l’historique actuel de vos commandes et charger également le fichier/etc/profile path_helper), ajoute votre historique de commandes et effectuez un exec de bash avec l'option login ('-l'):

history -a && exec bash -l
1
beattidp