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 execcommande 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 .bashrccommandement et exec bash?
sourceest 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 execcommande remplace le shell par un programme donné, dans votre exemple, elle remplace votre shell par bash (avec les fichiers de configuration mis à jour)
. ~/.bashrcje l'exécuterai dashplutôt que bash, donc il y a une erreur car elle shoptest manquante. sourcen'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 ~/.bashrcpréservera l' intégralité de votre environnement shell (bien que probablement modifié par le sourcing de ~/.bashrc), tandis que exec bashne 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 execcommande 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, . ~/.bashrcet exec bash:
Les deux solutions se rechargent efficacement~/.bashrc , mais il existe des différences:
. ~/.bashrcou source ~/.bashrcva préserver votre shell courant :
~/.bashrcdans 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 bashpourrait 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 $BASHcontient 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 $BASHsera 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 ~/.bashrcet . ~/.bashrcje 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
execcommande remplace le shell par un programme donné ... - WhoSayIn
exec bashhérite toujours de l'environnement du shell actuel. exec env -i bashserait plus proche (ou exec env -i bash -lsi 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 ~/.bashrcchaque 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.bashrctruc 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 ~/.bashrcfichier.
Sur mon serveur, il était situé à /home/your_username/.bashrc
(où se your_usernametrouve 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_loginou ~/.profile) à la place.
type:
source ~/.bashrc
ou, sous une forme plus courte:
. ~/.bashrc
.bashrcse 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 bashcommande 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:foopuis modifiez-la enexport PATH=$PATH:bar. Si vous vous connectez et vous déconnectez, seulbarsera dans le CHEMIN, mais si vous faites ce que vous suggérez, les deuxfooetbarseront dans le CHEMIN. Connaissez-vous un moyen de contourner cela?