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.
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?
Enviado por gejo el 11 Noviembre, 2009 - 19:56
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.
» Enlace permanente»
- Entra a tu cuenta o crea una para poder comentar.
# 94090 mmm... ¿Nadie me echa una
mmm... ¿Nadie me echa una mano? :'(
BOFH
# 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
# 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.
BOFH
# 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?
¿Quien es Jesucristo?
# 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.