¿Cómo recargar .bash_profile desde la línea de comandos?

997

¿Cómo puedo recargar .bash_profiledesde la línea de comando ?

Puedo hacer que el shell reconozca los cambios al .bash_profilesalir y volver a iniciar sesión, pero me gustaría poder hacerlo a pedido.

Markdorison
fuente

Respuestas:

1883

Simplemente escriba source ~/.bash_profile

Alternativamente, si desea guardar las pulsaciones de teclas, puede escribir . ~/.bash_profile

SiegeX
fuente
49
¿Qué tal alias BASHRELOAD=". ~/.bash_profile". Si haces esto a menudo, solo puedes usar el alias como br.
bobobobo
1
¿Hay alguna razón por la que deba hacer esto cada vez / sesión? No puedo hacer cambios en .bash_profile para que persistan aunque estén en el archivo cuando lo abro en un editor. Confuso.
erwinheiser
3
@erwinheiser ¿su sistema está cargando el archivo? Algunos sistemas usan otros archivos, como ~ / .bashrc.
Graham P Heath
1
Si desea saber si algo salió mal en la carga, puede usar:alias reload='source ~/.bash_profile && echo "File .bash_profile reloaded correctly" || echo "Syntax error, could not import the file"';
Cristian Batista
1
Para las personas que olvidaron que cambiaste a OhMyZsh. ejecute open ~ / .zshrc y realice los cambios allí en lugar de su .bash_profile
Sankofa
106
. ~/.bash_profile

Solo asegúrate de no tener dependencias del estado actual allí.

Carl Norum
fuente
15
¿Por qué funciona esto? Es decir, ¿cuál es el .comando en este caso?
Jonás
99
El operador punto:. es simplemente un alias para el sourcecomando.
Graham P Heath
8
@GrahamPHeath: estrictamente hablando, creo que es al revés; El .es más viejo que sourcees.
Carl Norum
44
sourcees una implementación específica de fiesta.
Thirupathi Thangavel
77
@StasS - .y sourceson literalmente lo mismo en bash. Desde el enlace: " sourcees un sinónimo de punto / punto ." en bash, pero no en POSIX sh, por lo que para una compatibilidad máxima use el punto ".
Carl Norum
31

Simplemente escriba:

. ~/.bash_profile

Sin embargo, si desea que se ejecute automáticamente cuando se inicia el terminal en lugar de ejecutarlo cada vez que abra el terminal, puede agregarlo . ~/.bash_profileal ~/.bashrcarchivo.

Nota:

Cuando abre una terminal, la terminal comienza a bash en modo interactivo (sin inicio de sesión), lo que significa que se generará ~/.bashrc.

~/.bash_profilesolo se obtiene de bash cuando se inicia en modo de inicio de sesión interactivo . Por lo general, esto solo ocurre cuando inicia sesión en la consola ( Ctrl+ Alt+ F1.. F6) o cuando se conecta a través de ssh.

Mohammad Anini
fuente
15

También puede usar este comando para recargar el ~ / .bash_profile para ese usuario. Asegúrate de usar el tablero.

su - username
jaypal singh
fuente
66
Esto invocará un shell completo dentro de un shell, lejos de ser ideal. Las otras opciones simplemente vuelven a ejecutar el archivo relevante, lo que significa que son (A) realmente relevantes para la pregunta formulada y (B) no acumulan shells y posiblemente vuelven a cargar otras cosas que no deberían ser (env vars, etc.). No son formas adecuadas para reemplazar el shell actual directamente (sin anidación), pero ya que es fuera de tema, voy a dejar a los lectores interesados a buscar en otro lugar.
underscore_d
3
está abriendo otro shell, esto no es una recarga, también podría abrir una nueva terminal o volver a iniciar sesión
Juan Diego
15

Me gusta el hecho de que después de que acaba de editar el archivo, todo lo que necesita hacer es escribir:

. !$

Esto genera el archivo que acaba de editar en el historial. Vea ¿Qué es el dólar bang en bash ?

hyper_st8
fuente
11
  1. Guardar archivo .bash_profile
  2. Ir al directorio de inicio del usuario escribiendo cd
  3. Recargar el perfil con . .bash_profile
Mithun Khatri
fuente
8
Solo ve a casa con cd. No hay necesidad de ~.
roNn23
8
No es necesario cd, puede volver a cargarlo desde el directorio en el que se encuentra actualmente:. ~/.bash_profile
Alex Villa
10

Si no le importa perder el historial de su terminal de shell actual, también podría hacerlo

bash -l

Eso bifurcaría su caparazón y abriría otro proceso hijo de bash. El -lparámetro le dice a bash que se ejecute como un shell de inicio de sesión, esto es necesario porque .bash_profile no se ejecutará como un shell sin inicio de sesión, para obtener más información sobre esto, lea aquí

Si desea reemplazar por completo el shell actual, también puede hacer:

exec bash -l

Lo anterior no bifurcará su shell actual, sino que lo reemplazará por completo, por lo que cuando escriba exit, terminará por completo, en lugar de dejarlo caer al shell anterior.

Ulukai
fuente
no perderás tu historial si estás usando iterm2
Xitcod13
4

Agregue alias bashs="source ~/.bash_profile"a su archivo bash. Entonces puedes llamar la bashspróxima vez

Shemeer M Ali
fuente
1
Alias ​​eso para reset- más fácil de recordar
jcollum
3

si el .bash_profile no existe, puede intentar ejecutar el siguiente comando:

. ~/.bashrc 

o

 source ~/.bashrc

en lugar de .bash_profile. Puedes encontrar más información sobre bashrc

Ezequiel De Simone
fuente
3

Quería publicar una respuesta rápida que mientras usa source ~/.bash_profileo las respuestas mencionadas anteriormente funcionan, una cosa para mencionar es que esto solo recarga su perfil de bash en la pestaña o sesión actual que está viendo. Si desea volver a cargar su perfil de bash en cada pestaña / shell, debe ingresar este comando manualmente en cada una de ellas.

Si usa iTerm, puede usar CMD⌘+ Shift+ Ipara ingresar un comando en todas las pestañas actuales . Para el terminal puede ser útil hacer referencia a este problema ;

ago
fuente
2

Yo uso Debian y simplemente puedo escribir exec bashpara lograr esto. No puedo decir si funcionará en todas las demás distribuciones.

Cassandra
fuente
2
Esto no funcionará en Mac (al menos no en la versión que estoy usando - Sierra) porque simplemente haciendo eso ejecuta un shell sin inicio de sesión que no ejecuta el .bash_profile
Ulukai
@Ulukai aparentemente solo escribe . .bash_profilemientras está dentro de su directorio de inicio en Mac hará el trabajo. Igual que la respuesta dada anteriormente por 7urkm3n.
Cassandra
2
alias reload!=". ~/.bash_profile"

o si quieres agregar registros a través de funciones

function reload! () {
    echo "Reloading bash profile...!"
    source ~/.bash_profile
    echo "Reloaded!!!"
}
7urkm3n
fuente
No, depende de tu preferencia. Si quieres añadir algunas líneas de impresión adicionales que muestran el estado ni sólo tiene que ir simplemente . ~/. bash_profile nisource ~/.bash_profile
7urkm3n
1

Estoy ejecutando Sierra, y estuve trabajando en esto por un tiempo (probando todas las soluciones recomendadas). Me confundí, así que finalmente intenté reiniciar mi computadora. Funcionó

mi conclusión es que a veces es necesario un restablecimiento completo

Fan número uno de Bjorks
fuente
1
Mike, sí, un restablecimiento completo funcionará porque todo se carga nuevamente. Mientras los cambios que haya realizado sean funcionales, surtirá efecto en el próximo arranque. Sin embargo, sería más fácil para usted buscar un poco el comando / método para simplemente actualizar el bash sin tener que hacerlo todo el tiempo. Habrá una manera de lograrlo sin el reinicio, que por supuesto absorberá demasiado tiempo solo para ver si el último cambio funciona. Quizás eche un vistazo a osxdaily.com/2016/06/07/…
Cassandra
1
Sí, probé tanto el comando abreviado como el completo para volver a cargar el perfil / ruta bash. no funcionó, solo cerró la sesión y volvió a funcionar. raro
Bjorks número uno fan