Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Llamadas a scripts bash desde Gambas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Llamadas a scripts bash desde Gambas 
 
Hola. Tengo una consulta relativa al scripting. Hice una aplicación simple que tiene varios botones, cada uno de los cuales ejecuta un shellscript que escribí fuera de gambas. Cuando estoy trabajando en el proyecto y lo pruebo, funciona perfectamente.
El problema es que cuando creo un ejecutable, los mismos botones, con las mismas instrucciones, no logran hacer que la terminal ejecute los scripts. La terminal de gnome me da un mensaje "sh: Can't open ./projectfolder/script".  Pero funciona bien desde el modo de edición dentro de gambas, y si ejecuto los scripts directamente desde la terminal.  Es decir, la ruta y nombre están bien. Solamente ocurre cuando uso el ejecutable.
En definitiva, el programa está terminado pero me falta hacerlo independiente.
Alguna idea?
Desde ya, muchas gracias
 



 
gadolinio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Scripting Con Gambas 
 
Hola

El problema es que tus scripts residen en la ruta del proyecto, por lo tanto esa ruta nunca existirá en otra máquina ni en el ejecutable.

Prueba a incluirlos dentro de tu proyecto como archivos, del mismo modo a como incluyes imágenes o iconos y luego mediante código los copias a una ubicación estándar, como /home/usuario/.nombredelprograma/tu_script.sh

Para ello dispones de la clase User. Te pongo un ejemplo:

IF NOT Exist(User.Home &/ ".nombredelprograma/tu_script.sh") THEN
    COPY "tu_script.sh" TO User.Home &/ ".nombredelprograma/tu_script.sh"
    SHELL "chmod +x " &  User.Home &/ ".nombredelprograma/tu_script.sh"
ENDIF


Básicamente lo que hacemos es comprobar si ya existe el fichero en esa ubicación, si no existe lo copiamos y modificamos sus atributos para hacerlo ejecutable.

Al fichero que está "embebido dentro del ejecutable" accedemos directamente, sin poner ruta, al menos que crees una carpeta en el árbol de tu proyecto, como por ejemplo "DATOS", en cuyo caso habrías de referirte al fichero como "DATOS/tu_script.sh".

El "User.Home" nos proporciona siempre la carpeta de usuario actual del pc (de cualquier pc), por eso luego concatenamos a esa ruta una carpeta oculta con un nombre significativo y dentro de ella nuestros scripts. El símbolo & seguido de la / como un único símbolo &/ hace que las rutas se concatenen perfectamente sin tener que usar la / dentro de los strings.

Como podría darse el caso de que nuestros archivos "perdieran" su condición de ejecutables, no cuesta nada hacer un chmod +x sobre ellos para asegurarnos.

Por último, para ejecutar tus scripts, igualmente recurrimos a User.Home mas la ruta relativa a ellos:

SHELL User.Home &/ ".nombredelprograma/tu_script.sh -arg1 arg2"

' o también

EXEC [User.Home &/ ".nombredelprograma/tu_script.sh", "-arg1", "arg2"]



Puede que tus scripts no necesiten argumentos, pero lo pongo de paso, por si resulta útil ver la diferencia entre SHELL y EXEC.

Espero que no te haya liado mucho!

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Llamadas A Scripts Bash Desde Gambas 
 
Gracias por la detallada y pronta respuesta!
Ya agregué los fragmentos de código para que cada script esté incluido.
Ahora, me quedan algunas dudas:
1) cuando cree el ejecutable, y lo lleve a otra computadora, ¿los scripts van a estar incluidos dentro del mismo archivo .gambas? Es decir, ¿esos comandos que me pasaste ejercen su acción cuando se compila la aplicación? La pregunta apunta básicamente a saber qué es lo que tengo que transportar como paquete de una computadora a otra, para que todos los scripts estén presentes. (Pienso subirlo a internet una vez terminado, y no sé si tengo que incluir los scripts en el paquete .tar que voy a crear).

2) ¿es necesario tener gambas y/o wine instalado en el equipo para que se ejecute el archivo .gambas? El tipo de archivo .gambas parece estar ejecutándose con wine, cosa que me resulta extraña. Pero también comprobé que cambiando la extensión de .gambas a .exe se ejecuta perfectamente. También em haría falta saber ésto para agregar un script que instale gambas y/o wine y explicar eso en el archivo readme.

3) los scripts que uso requieren que el usuario interactúe con la terminal, por lo que no sirve que se ejecuten en segundo plano. Para éso, en mi equipo con jaunty usé el comando SHELL "gnome-panel -- ./script.sh" y funciona bien (abre la terminal, y en ella ejecuta el script, para que el usuario pueda contestar ahí mismo lo que se le solicita, y vea el resultado).
Pero en un equipo con intrepid ésto no ocurre, sino que simplemente se abre la terminal pero no ejecuta el script. Digamos que no obedece a la porción "-- ./script.sh" del comando.

Espero no molestar con tantas preguntas :S
Gracias!
 



 
gadolinio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Llamadas A Scripts Bash Desde Gambas 
 
gadolinio escribió: [Ver mensaje]
Gracias por la detallada y pronta respuesta!
Ya agregué los fragmentos de código para que cada script esté incluido.
Ahora, me quedan algunas dudas:
1) cuando cree el ejecutable, y lo lleve a otra computadora, ¿los scripts van a estar incluidos dentro del mismo archivo .gambas? Es decir, ¿esos comandos que me pasaste ejercen su acción cuando se compila la aplicación? La pregunta apunta básicamente a saber qué es lo que tengo que transportar como paquete de una computadora a otra, para que todos los scripts estén presentes. (Pienso subirlo a internet una vez terminado, y no sé si tengo que incluir los scripts en el paquete .tar que voy a crear).


Si, los scripts van dentro y mediante código los copias a la ubicación que quieras, como expliqué en el ejemplo.

Pero la opción que planteas de incluirlos en el paquete de instalación (tar, deb, rpm) también es válida siempre que uses rutas estándar, es decir, que sean comunes en todos los equipos de usuarios.

Citar:

2) ¿es necesario tener gambas y/o wine instalado en el equipo para que se ejecute el archivo .gambas? El tipo de archivo .gambas parece estar ejecutándose con wine, cosa que me resulta extraña. Pero también comprobé que cambiando la extensión de .gambas a .exe se ejecuta perfectamente. También em haría falta saber ésto para agregar un script que instale gambas y/o wine y explicar eso en el archivo readme.


gambas utiliza un intérprete para ejecutarse (además de otros componentes). Se suele llamar "runtime" y es un pequeño archivo "gbr2". Pero para que funcione un programa se requieren una serie de componentes, los cuales proveen características adicionales, como el uso de una interfaz gráfica GTK o QT , motores de bases de datos como sqlite o mysql, etc.

Es decir, tu aplicación (o ejecutable) no puede funcionar en una máquina que no tenga al menos gambas2-runtime y si es una aplicación gráfica, gambas2-gb-form, gambas2-gb-gui...

Wine aquí no tiene nada que ver en absoluto! Aunque cambies la extensión del archivo, se seguirá ejecutando con el intérprete gbr2. Mira el shebang del ejecutable abriéndolo con un editor de texto...


Volviendo al tema de la distribución de tu programa, el IDE de gambas tiene una buena herramienta para hacerlo: Menú Proyecto->Crear->Paquete de Instalación.

Citar:

3) los scripts que uso requieren que el usuario interactúe con la terminal, por lo que no sirve que se ejecuten en segundo plano. Para éso, en mi equipo con jaunty usé el comando SHELL "gnome-panel -- ./script.sh" y funciona bien (abre la terminal, y en ella ejecuta el script, para que el usuario pueda contestar ahí mismo lo que se le solicita, y vea el resultado).
Pero en un equipo con intrepid ésto no ocurre, sino que simplemente se abre la terminal pero no ejecuta el script. Digamos que no obedece a la porción "-- ./script.sh" del comando.

Espero no molestar con tantas preguntas :S
Gracias!


No puedo ayudarte con esto. Prueba usando:

SHELL "xterm -e tu_comando_o_script.sh"


Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Llamadas A Scripts Bash Desde Gambas 
 
Últimas novedades sobre los asuntos "2" y "3".

    2) No puedo abrir el ejecutable con gedit para ver algo que me ilumine... jaja. El asunto es que si instalo gambas únicamente, no hay una asociación para abrir el archivo .gambas. Probé abrirlo con gambas pero no puede (porque no es un proyecto). Tampoco lo puedo ejecutar desde terminal ni con el programa de autoejecución. Instalando sólo wine, tampoco se puede ejecutar. Instalando ambos, y con wine como programa en la solapa abrir con (en propiedades), se ejecuta perfectamente. En fin, al menos sé un modo de hacerlo funcionar....


    3) Bueno, por lo que estuve probando en máquinas virtuales y "reales", en intrepid el comando SHELL "gnome-terminal -- ruta/al/script/script.sh" sólo obedece la orden de abrir una terminal, sin ejecutar lo que escriba. Pero en jaunty, karmic y lucid, funciona.

Muchas gracias por las respuestas!
 



 
gadolinio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Llamadas a scripts bash desde Gambas 
 
Vuelvo a repetir que wine aquí no pinta nada.

Lo que te está ocurriendo es que has debido modificar la asociación del archivo hacia el programa que debe ejecutarlo o abrirlo.

Si pudieras ver la cabecera de un ejecutable gambas, verías esto:

#!/usr/bin/env gbr2

Eso se llama shebang, y está indicando al ejecutable dónde tiene que buscar su intérprete. Lo que está pasando es que aunque uses wine, se detecta que debe abrirse con gbr2 y de hecho se abre, pero no es que se abra con wine.

Seguramente no estás usando bien la sintaxis para ejecutar archivos en consola o bien se hayan perdido los permisos de ejecución de tu fichero.

Prueba a abrirlo así, que es como se debe hacer:

./tu_ejecutable.gambas

Observa el punto y la barra al principio para indicar que debe ejecutarse ese fichero cuando con el prompt del sistema te encuentras bajo su directorio.

Si lo haces usando la ruta absoluta al ejecutable, entonces no hace falta el puntito y la barra, por ejemplo:

/home/tu_nombre/carpeta_del_programa/tu_ejecutable.gambas

De todas formas, si desde el IDE has generado un paquete de instalación, y lo has instalado en otra máquina, no sería necesario todo esto, ya que el ejecutable se coloca en el path, y bastaría con llamarlo por su nombre y extensión desde cualquier ruta en el terminal, o bien desde el menú que se debería crear. Además el paquete generado resolvería las dependencias necesarias para asegurar que el programa funcione.

También y por si acaso, asegúrate de que el programa predeterminado para abrir ficheros gambas sea "gbr2".

Respecto al punto 3 siento no poder ayudarte, quizás haya cambiado algo en las nuevas distribuciones...

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Llamadas A Scripts Bash Desde Gambas 
 
>>> También y por si acaso, asegúrate de que el programa predeterminado para abrir ficheros gambas sea "gbr2".

Mil gracias! Eso era exactamente lo que necesitaba saber! Configuré el ejecutable para que se abra con gbr2, y agregué los pasos al readme. Ahora también entiendo por qué, si bien *teóricamente* se estaba ejecutando con wine, no se abría en un escritorio aparte (tengo wine configurado así, y así lo hacen todos los programas de windows).

Bueno, ahora es sólo cuestión de probarlo un poco más y ver si le falta pulir algo.
Después tengo que ver dónde lo subo para que esté disponible. Alguna idea/recomendación?
Otra cosa: pensaba explicitar en el "acerca de..." que la aplicación fue hecha con Gambas2. ¿Está legalmente bien? ¿Hace falta algo más?
 



 
gadolinio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Script bash para determinar configuración... jguardon Shell Scripting 0 Domingo, 27 Septiembre 2009, 09:15 Ver último mensaje
jguardon
No hay nuevos mensajes Ejecutar programa en Gambas desde Pendrive... jguardon General 2 Domingo, 01 Noviembre 2009, 21:45 Ver último mensaje
jguardon
No hay nuevos mensajes Ayuda! Identificador De Llamadas Con Gambas tony8a Sobre Gambas-es 1 Martes, 16 Marzo 2010, 17:52 Ver último mensaje
fabianfv
No hay nuevos mensajes Llenar un listview desde combobox y textbox jj231089 Controles/Librerías/Componentes 1 Jueves, 03 Octobre 2013, 06:43 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron