Si j'apporte des modifications à .bashrc
, comment puis-je le recharger sans me déconnecter et me reconnecter?
Si j'apporte des modifications à .bashrc
, comment puis-je le recharger sans me déconnecter et me reconnecter?
Réponses:
Il vous suffit de saisir la commande:
source ~/.bashrc
ou vous pouvez utiliser la version plus courte de la commande:
. ~/.bashrc
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:
exec bash
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 de bash
(avec les fichiers de configuration mis à jour).
source .bashrc
commandement et exec 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 la exec
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écuterai dash
plutôt que bash
, donc il y a une erreur car elle shopt
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 que exec 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
. La exec
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
et exec bash
:
Les deux solutions se rechargent efficacement~/.bashrc
, mais il existe des différences:
. ~/.bashrc
ou source ~/.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érent bash
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, il exec "$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.
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.
. .bashrc
~/
, mais comme la réponse du haut montre les deux source ~/.bashrc
et . ~/.bashrc
je me demande si cette réponse doit être supprimée car redondante.
Selon votre environnement, il suffit de taper
bash
peut également fonctionner.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
commande remplace le shell par un programme donné ... - WhoSayIn
exec bash
hérite toujours de l'environnement du shell actuel. exec env -i bash
serait plus proche (ou exec 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:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Rouvrez votre session et elle devrait charger tous les chemins / scripts que vous avez dans .bashrc.
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)
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;
Pour moi, ce qui fonctionne lorsque je change de CHEMIN, c'est: exec "$BASH" --login
~/.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
.bashrc
se trouve. Une manière plus correcte de le faire, comme indiqué dans la réponse acceptée, est source ~/.bashrc
.
j'utilise la commande suivante sur msysgit
. ~/.bashrc
version plus courte de
source ~/.bashrc
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'):
history -a && exec bash -l
Cela fonctionnera également ..
cd ~
source .bashrc
~
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 vous exec 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.
j'ai personnellement
alias ..='source ~/.bashrc'
dans mon bashrc, afin que je puisse simplement utiliser ".." pour le recharger.
..
comme alias cd ..
, donc ce sera très déroutant.
alias rehash='source ~/.bashrc'
est mon choix.
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?