Si hago cambios en .bashrc, ¿cómo lo recargo sin cerrar sesión y volver a iniciarla?
Si hago cambios en .bashrc, ¿cómo lo recargo sin cerrar sesión y volver a iniciarla?
Respuestas:
Solo tienes que ingresar el comando:
source ~/.bashrc
o puede usar la versión más corta del comando:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Esto hará que la edición sea mucho más fluida, ya que no necesita pensar en la recarga, después de hacer la edición, si usa el alias personalizado.
O podrías usar:
exec bash
Esto hace lo mismo y es más fácil de recordar (al menos para mí).
El execcomando reemplaza completamente el proceso de shell ejecutando la línea de comando especificada. En nuestro ejemplo, reemplaza lo que sea el shell actual con una nueva instancia de bash(con los archivos de configuración actualizados).
source .bashrcmando y exec bash?
sourcees un comando de shell incorporado que ejecuta el contenido del archivo pasado como argumento, en el shell actual . Entonces, en su ejemplo, ejecuta el archivo .bashrc en el shell actual. Y el execcomando reemplaza el shell con un programa dado, en su ejemplo, reemplaza su shell con bash (con los archivos de configuración actualizados)
. ~/.bashrcse ejecutará en dashlugar de hacerlo bash, por lo que hay un error porque shoptfalta. sourceno se encuentra desde el shell, por lo que esa solución también está fuera. ¡Probé esto y la imagen del acoplador se construyó sin problemas!
source ~/.bashrcpreservará todo su entorno de shell (aunque probablemente se modificó por el origen de ~/.bashrc), mientras exec bashque solo conservará las variables de entorno de su shell actual (cualquier cambio ad-hoc al shell actual en términos de variables de shell, función, opciones se pierden). Dependiendo de sus necesidades, puede preferirse uno u otro enfoque.
exec bash. El execcomando reemplaza el shell con el programa, en nuestro caso, bash. Por lo tanto, siempre hay una instancia de bash en el terminal.
Para complementar y contrastar las dos respuestas más populares, . ~/.bashrcy exec bash:
Ambas soluciones se recargan efectivamente~/.bashrc , pero hay diferencias:
. ~/.bashrco source ~/.bashrcse preservar su shell actual :
~/.bashrcen el shell actual ( fuente ), el shell actual y su estado se conservan , lo que incluye variables de entorno, variables de shell, opciones de shell, funciones de shell e historial de comandos.exec basho, más enérgicamente, exec "$BASH"[1] , reemplazará su shell actual con una nueva instancia y, por lo tanto, solo conservará las variables de entorno de su shell actual (incluidas las que haya definido ad-hoc).
Dependiendo de sus necesidades, puede preferirse uno u otro enfoque.
[1] exec bashen teoría podría ejecutar un ejecutable diferente bash al que inició el shell actual, si es que existe en un directorio mencionado anteriormente en el $PATH. Dado que la variable especial $BASHsiempre contiene la ruta completa del ejecutable que inició el shell actual, exec "$BASH"se garantiza que usará el mismo ejecutable.
Una nota "..."al respecto $BASH: las comillas dobles aseguran que el valor de la variable se use tal cual, sin la interpretación de Bash; Si el valor no tiene espacios incrustados u otros metacaracteres de shell (lo cual no es probable en este caso), no necesita estrictamente comillas dobles, pero usarlos es un buen hábito para formar.
exec $BASHfuente ~/.bashrc, por lo que verá sus cambios en el entorno de shell en la nueva sesión.
Alguien editó mi respuesta para agregar un inglés incorrecto, pero aquí estaba el original, que es inferior a la respuesta aceptada.
. .bashrc
~/, pero dado que la respuesta principal muestra ambas source ~/.bashrcy . ~/.bashrcme pregunto si esta respuesta debería eliminarse como redundante.
Dependiendo de su entorno, simplemente escribiendo
bash
También puede funcionar.
. ~/.bashrc
source ~/.bashrc
exec bash
execcomando reemplaza el shell con un programa dado ... - WhoSayIn
exec bashTodavía hereda el entorno del shell actual. exec env -i bashestaría más cerca (o exec env -i bash -lsi actualmente está en un shell de inicio de sesión).
Dependiendo de su entorno, es posible que desee agregar secuencias de comandos para que .bashrc se cargue automáticamente cuando abra una sesión SSH. Recientemente hice una migración a un servidor que ejecuta Ubuntu, y allí, .profile, no .bashrc o .bash_profile se carga por defecto. Para ejecutar cualquier script en .bashrc, tenía que ejecutar source ~/.bashrccada vez que se abría una sesión, lo que no ayuda al ejecutar implementaciones remotas.
Para que su .bashrc se cargue automáticamente al abrir una sesión, intente agregar esto a .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Vuelva a abrir su sesión, y debería cargar cualquier ruta / script que tenga en .bashrc.
Utilicé easyengine para configurar mi servidor basado en la nube vultr.
Encontré mi archivo bash en /etc/bash.bashrc.
¡Lo mismo source /etc/bash.bashrchizo el truco para mí!
actualizar
Al configurar un servidor simple (ubuntu 16.04), puede usar la información anterior, cuando aún no ha configurado un nombre de usuario y está iniciando sesión a través de root.
Es mejor crear un usuario (con privilegios de sudo) e iniciar sesión como este nombre de usuario.
Esto creará un directorio para su configuración, incluidos los archivos .profile y .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
Ahora, editará y (y "fuente") el ~/.bashrcarchivo.
En mi servidor, esto estaba ubicado en /home/your_username/.bashrc
(donde your_usernamees realmente el nuevo nombre de usuario que creó anteriormente, y ahora inicie sesión con)
exec bash es una excelente manera de volver a ejecutar y lanzar un nuevo shell para reemplazar el actual. solo para agregar a la respuesta, $ SHELL devuelve el shell actual que es bash. Al usar lo siguiente, volverá a cargar el shell actual, y no solo a bash.
exec $SHELL -l;
Para mí, lo que funciona cuando cambio la RUTA es: exec "$BASH" --login
~/.bashrc, lo que --loginhará que no recarga (directamente); a nivel de usuario, se recargará ~/.bash_profile(o ~/.bash_logino ~/.profile) en su lugar.
tipo:
source ~/.bashrc
o, en forma más corta:
. ~/.bashrc
.bashrcse encuentra. Una forma más correcta de hacer esto, como se dice en la respuesta aceptada, es source ~/.bashrc.
uso el siguiente comando en msysgit
. ~/.bashrc
versión más corta de
source ~/.bashrc
Suponiendo un shell interactivo, y desea mantener su historial de comandos actual y también cargar / etc / profile (que carga datos del entorno que incluyen / etc / bashrc y en Mac OS X carga rutas definidas en /etc/paths.d/ a través de path_helper), agregue su historial de comandos y haga un exec de bash con la opción de inicio de sesión ('-l'):
history -a && exec bash -l
Noté que el exec bashcomando puro preservará las variables de entorno, por lo que debe usarexec -c bash para ejecutar bash en un entorno vacío.
Por ejemplo, inicia sesión en un bash y export A=1, si usted exec bash, elA == 1 .
Si exec -cl bash,A está vacío.
Creo que esta es la mejor manera de hacer tu trabajo.
yo personalmente tengo
alias ..='source ~/.bashrc'
en mi bashrc, para que pueda usar ".." para recargarlo.
..como un alias cd .., por lo que será muy confuso.
alias rehash='source ~/.bashrc'Es mi elección.
export PATH=$PATH:fooy luego la cambia aexport PATH=$PATH:bar. Si inicia la sesión y ir hacia atrás, solamentebarestará en el camino, pero si lo que usted sugiere, tantofooybarestará en el PATH. ¿Conoces alguna forma de evitar esto?