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 exec
comando 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 .bashrc
mando y exec bash
?
source
es 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 exec
comando reemplaza el shell con un programa dado, en su ejemplo, reemplaza su shell con bash (con los archivos de configuración actualizados)
. ~/.bashrc
se ejecutará en dash
lugar de hacerlo bash
, por lo que hay un error porque shopt
falta. source
no 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 ~/.bashrc
preservará todo su entorno de shell (aunque probablemente se modificó por el origen de ~/.bashrc
), mientras exec bash
que 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 exec
comando 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, . ~/.bashrc
y exec bash
:
Ambas soluciones se recargan efectivamente~/.bashrc
, pero hay diferencias:
. ~/.bashrc
o source ~/.bashrc
se preservar su shell actual :
~/.bashrc
en 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 bash
o, 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 bash
en 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 $BASH
siempre 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 $BASH
fuente ~/.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 ~/.bashrc
y . ~/.bashrc
me 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
exec
comando reemplaza el shell con un programa dado ... - WhoSayIn
exec bash
Todavía hereda el entorno del shell actual. exec env -i bash
estaría más cerca (o exec env -i bash -l
si 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 ~/.bashrc
cada 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.bashrc
hizo 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 ~/.bashrc
archivo.
En mi servidor, esto estaba ubicado en /home/your_username/.bashrc
(donde your_username
es 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 --login
hará que no recarga (directamente); a nivel de usuario, se recargará ~/.bash_profile
(o ~/.bash_login
o ~/.profile
) en su lugar.
tipo:
source ~/.bashrc
o, en forma más corta:
. ~/.bashrc
.bashrc
se 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 bash
comando 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:foo
y luego la cambia aexport PATH=$PATH:bar
. Si inicia la sesión y ir hacia atrás, solamentebar
estará en el camino, pero si lo que usted sugiere, tantofoo
ybar
estará en el PATH. ¿Conoces alguna forma de evitar esto?