* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

¿Como hacer un script en bash que se actualiza a sí mismo?

Hola.

Estoy haciendo pruebas en bash y me gustaría conocer vustra opinión sobre este pequeño script que estoy implementando.

La idea es que el script se auto actualice a sí mismo. Si, es algo retorcido, pero... ¿qué le vamos a hacer? XDD

Por ahora tengo escrito esto:

#!/bin/bash

# VARIABLES
DIR='/home/gejo/scripts/updateo'
OLDDIR=`pwd`
SCRIPTNAME=`basename $0`
let VERSION=7


   let NEWVERSION=`cat $DIR/$SCRIPTNAME.version`

   if [ $VERSION -lt $NEWVERSION ]; then

         echo " ACTUALIZACION EN CURSO $VERSION -> $NEWVERSION";
         (cp -f $DIR/$SCRIPTNAME . >/dev/null 2>&1) &
         wait

   fi



El programa funciona (o debería) de la siguiente forma:

  • Obtengo la versión del fichero incluida en $DIR/$SCRIPTNAME.version
  • Comprobamos si la versión del propio script es inferior a la que contiene $DIR/$SCRIPTNAME.version
  • En caso afirmativo, significará que la versión de nuestro fichero es inferior a la que hay en el directorio y, por tanto, copio $DIR/$SCRIPTNAME encima

El principal problema es que, al actualizarse a sí mismo, se machaca estando aún en ejecución.
He conseguido mediante los paréntesis, que no de errores ya que, al parecer, los paréntesis crean un proceso paralelo. El código en sí funciona pero no estoy del todo seguro si esta es la mejor forma de hacerlo. ¿Alguien que quiera/pueda orientarme?

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.


Gravatar de gejo

# 94090 mmm... ¿Nadie me echa una

mmm... ¿Nadie me echa una mano? :'(



Gravatar de jacen

# 94097 Nooooooooo!!!!

Si es que entiendo bien, lo que quieres hacer es cambiar el código del script mientras está en ejecución. Si es así, te digo que NO LO HAGAS!!!

¿Por qué?, pues aparte de estar atentando contra las leyes de la naturaleza, puedes terminar en el infierno!

Ahora, hablando en serio, me he topado varias veces con ese caso y, en la práctica, si modificas el código de un script en runtime, la ejecución del mismo empezará a adquirir un tono de modificación aleatoria. Si bien es cierto la ley dice que "Un programa se carga en memoria, por lo tanto cualquier modificación al fuente no debería afectar a lo que esté en memoria", la verdad es que eso no ocurre y, de alguna manera oscura, quedan ligados. Hay varios foros en internet que tratan el tema pero no llegan a ningún acuerdo.

Deberías buscar un método alternativo para hacer lo que quieres.

Salu2!

--
Jacen
Linux user #294897

Jacen
BOFH y miembro del equipo MDKtrans
Linux user #294897



Gravatar de gejo

# 94109 Gracias por

Gracias por contestar.

Tendré que buscar otra forma entonces de hacerlo pero ya me había hecho ilusiones, parecía que había encontrado la forma de actualizarse a sí mismo :'(

Un saludo.



Gravatar de drakedalfa

# 94142 ¿Porque no dos scripts?

Crea un script update.sh que actualize al primero. Podrias tenerlo en un cron o que el primero lo llame siempre al ejecutarse y si hay nueva version que se mate no sin antes haber lanzado el proceso de actualizacion.

--
Temporada de caza de Koalas | ¿Quien es Jesucristo?



Gravatar de gejo

# 94154 Eso es lo que tenía en

Eso es lo que tenía en mente.

Había pensado en crear un script update.sh que obtenga por parámetro el nombre del archivo a actualizar. El programa principal comprueba si tiene que actualizarse y en caso afirmativo, llama a este update y se cierra. update.sh lo actualiza y al finalizar lo lanza de nuevo.

En cuanto lo tenga más o menos hecho lo publico por aquí o si alguien se apunta lo podemos hacer a medias ^_^

Un saludo.

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.