¿Cómo ejecutar "source .bashrc" automáticamente después de editar y savelo?

¿Es posible ejecutar automáticamente "source .bashrc" cada vez que edito el file bashrc y lo guardo?

Solutions Collecting From Web of "¿Cómo ejecutar "source .bashrc" automáticamente después de editar y savelo?"

Una forma, como señala otra respuesta , sería hacer una function que reemplace su llamada de editor a .bashrc con un process de dos pasos que

  1. abre su editor en .bashrc
  2. fonts .bashrc

como:

vibashrc() { vi $HOME/.bashrc; source $HOME/.bashrc; } 

Esto tiene algunas deficiencias:

  • sería necesario que recuerde escribir vibashrc cada vez que desee que se produzca el suministro
  • solo sucedería en tu window de bash actual
  • intentaría get .bashrc independientemente de si realizó algún cambio en él

Otra opción sería conectar la funcionalidad PROMPT_COMMAND de bash a source .bashrc en cualquiera / todos los bash shells siempre que vea que el file .bashrc se ha actualizado (y justo antes de que se muestre el siguiente post).

Agregaría el siguiente código a su file .bashrc (o extenderá cualquier funcionalidad PROMPT_COMMAND existente con él):

 prompt_command() { # initialize the timestamp, if it isn't already _bashrc_timestamp=${_bashrc_timestamp:-$(stat -c %Y "$HOME/.bashrc")} # if it's been modified, test and load it if [[ $(stat -c %Y "$HOME/.bashrc") -gt $_bashrc_timestamp ]] then # only load it if `-n` succeeds ... if $BASH -n "$HOME/.bashrc" >& /dev/null then source "$HOME/.bashrc" else printf "Error in $HOME/.bashrc; not sourcing it\n" >&2 fi # ... but update the timestamp regardless _bashrc_timestamp=$(stat -c %Y "$HOME/.bashrc") fi } PROMPT_COMMAND='prompt_command' 

Luego, la próxima vez que inicie session, bash cargará esta function y activará el enganche, y cada vez que esté a punto de mostrar un aviso, verificará si $ HOME / .bashrc se ha actualizado. Si lo ha hecho, ejecutará una comprobación rápida de errores de syntax (la opción set -n ), y si el file está limpio, descárguelo.

Actualiza la variable de indicación de date y hora interna independientemente de la verificación de syntax, de modo que no intente cargarla hasta que el file se haya guardado / actualizado nuevamente.

Tal vez una function de shell como:

 nano .bashrc ; source .bashrc 

¿O simplemente ejecuta ese command?

Puedes orderar a bash que vuelva a leer .bashrc cuando reciba una señal . Pon la siguiente línea en tu .bashrc :

 trap '. ~/.bashrc' USR1 

Luego, cada vez que haya editado su .bashrc , envíe las instancias interactivas de bash la señal. (¡No lo envíe a los guiones! Eso los mataría.) No hay una forma infalible de hacerlo, por lo que existe el riesgo de matar a un process no relacionado. El siguiente fragment de bash se acerca: busca bash invocado sin arguments y con una input estándar proveniente de un terminal (o cualquier otro dispositivo de caracteres, pero en la práctica eso no es un problema):

 ps -u "$(id -u)" -o pid= -o args= | while read -r pid args; do if [[ $args = bash || $args = */bin/bash ]]; then stdin="$(lsof -p"$pid" | sed -n '/^f0$/ { n; s/^n//p; q; }')" if [ -c "$stdin" ]; then kill -USR1 "$pid" fi fi done 

Alternativamente, para evitar la falta de fiabilidad del enfoque de la señal, puede hacer que bash vuelva a leer .bashrc de su propia violición. La desventaja de este enfoque es que volverá a leer el file incluso si acaba de savelo con un error de syntax o un error de lógica (por ejemplo, un bucle infinito). El contenido de la variable PROMPT_COMMAND se ejecuta cada vez que bash muestra un post, por lo que debe ponerlo en su .bashrc :

 reread_bashrc () { if ((SECONDS > bashrc_last_read)); then . ~/.bashrc bashrc_last_read=$SECONDS fi } bashrc_last_read=$SECONDS PROMPT_COMMAND="$PROMPT_COMMAND reread_bashrc" 

Una bendición mixta de este enfoque es que no se disparará mientras estás escribiendo un command. Tienes que al less presionar Enter .

 edit_and_source () { local tmpfile=$(mktemp) trap 'rm -f "$tmpfile"' EXIT RETURN cp -p "$1" "$tmpfile" while true; do command "${EDITOR:-vi}" "$tmpfile" bash -n "$tmpfile" && break echo 'There were errors. Re-edit?' >&2 read -p 'Yes/No/Force: ' case "$REPLY" in [Yy]*) continue ;; [Ff]*) break ;; *) return ;; esac done mv "$tmpfile" "$1" } 

Esta function bash le permitirá editar el file especificado usando el editor definido por $EDITOR (o vi si está desactivado), y luego lo fuente.

 $ edit_and_source ~/.bashrc 

Si el file contiene errores después de la edición, la function le preguntará si desea editarlo nuevamente:

 /tmp/tmp.ETdo10orcg: line 4: syntax error near unexpected token `(' /tmp/tmp.ETdo10orcg: line 4: ` nt hn thnt();0' There were errors. Re-edit? Yes/No/Force: n 

Si responde "no", el file original permanecerá intacto. Responder "fuerza" (o cualquier palabra que comience por "f") obligará a instalar el file con errores.