https://foro.gambas-es.org/viewtopic.php?f=6&t=4342
-----------------------------------
ivanolete
Jueves, 08 Enero 2015, 20:53

Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
Hola, ando haciendo un sistema que lee  huellas desde un dispositivo UrU 4500 con una interfaz en GAMBAS. El problema es que tengo un programa escrito en C que hace uso de la libreria "libfprint", y buenoel programa en C funciona bien cuando lo invoco desde la linea de comandos de PIDORA.

El problema surge cuando invoco el mismo programa desde GAMBAS con "EXEC" o "SHELL" ya que si se invoca pero no me toma todos los argumentos como en la linea de comandos.

Ya he intentado varias notaciones,convertir el charset, hacer un shell script... y nada.   :cry: 

¿¿Alguna idea???


A continuación muestro el código:
[code linenumbers=false syntax=gambas]
' Gambas class file 

Library "libfprint:0"

Private Extern fp_init() As Integer
Private Extern fp_exit()


Public Sub _new()

End

 
Public Sub Form_Open()
 Dim fecha As Variant
  Me.Center
 
  fecha = Format(Now, "dd/m/yy")
  lcdfecha.Text = fecha
  
  img_mostrar_scan.Hide
  
  reanudar_button2.Hide
 
End


Public Sub scanear_dedo_button_Click()


  label1.Text = "Coloque su dedo índice derecho en el lector" ' 
  scan_dedo_imagen()
 
 
End

Public hproc As Process
Public Sub scan_dedo_imagen()

Dim devlib As Integer ' resultado de existencia de libreria de escaneo de huella 
   
  
  devlib = fp_init() ' deteccion de si tenemos libfprint instalada, para poder invocar el programa 
    If (devlib < 0) Then
      Message.Error("Libreria de escaneo no instalada/detectada, favor revisar o reportar fallo")
      Return
    Else
      Print "Liberia encontrada, command line utils can be invocado"
     
      fp_exit()
    Endif
 
 
  hproc = Shell "/var/www/html/./pscript" For Input As "lectura"   
  'hproc = Exec ["/var/www/html/escanerdedo", "verify", "rojo.pgm"] For Input As "lectura"  'está es otra forma en que lo invoqué
  'hproc = Shell"/var/www/html/escanerdedo verify rojo.pgm" For Input As "lectura"  'está es otra forma en que lo invoqué
End

Public Sub lectura_Read() ' Rutina que muestra la ultima salido de la consola a partir de la ejecucion lectura en hproc
  
  Dim salida As String
  Line Input #Last, salida
  Print "-->" & salida
  If salida == 1 Then 
    Message.Info("La Huella coincide")
        
    
    label1.Text = "" 
    
  Endif
 
  If salida == 0 Then 'este if mantiene recursiva la ejecucion de el proceso hasta que se valide la huella
   Message.Info("La huella no coincide, vuelva a ponerla por favor")
   hproc = Shell "/var/www/html/./pscript" For Input As "lectura"
   'hproc = Exec ["/var/www/html/escanerdedo", "verify", "rojo.pgm"] For Input As "lectura"  'está es otra forma en que lo invoqué
   'hproc = Shell"/var/www/html/escanerdedo verify rojo.pgm" For Input As "lectura"  'está es otra forma en que lo invoqué
 Endif
End


Public Sub timReloj_Timer()

  lcdhora.Value = Hour(Now)
  lcdminutos.Value = Minute(Now)
  lcdsegundos.Value = Second(Now)

End


Public Sub reanudar_button2_Click()

   scan_dedo_imagen("ivanol")

End

[/code]


-----------------------------------
ivanolete
Jueves, 08 Enero 2015, 20:59

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
Olvidé comentar que en el shell script esta escritá la misma linea 


/.../escanerdedo verify rojo.pgm


Cuando invoco el shell script funciona bien

pero cuando lo invoco como proceso desde GAMBAS no toma el argumento rojo.pgm


-----------------------------------
jsbsan
Jueves, 08 Enero 2015, 21:23

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
Hola  ivanolete:

[quote]rojo.pgm[/quote]
¿donde esta ese archivo? Seguramente tienes que indicar la ruta donde este.


-----------------------------------
shordi
Jueves, 08 Enero 2015, 22:05

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
A parte de lo que jsbsan te indica, el path "/var/www/html/./pscrip" es erróneo. Seguramente funcione, pero el . es una referencia al directorio actual, es decir al propio /var/www/html
por tanto es redundante. Bastaría con "/var/www/html/pscrip"

Saludos.


-----------------------------------
ivanolete
Viernes, 09 Enero 2015, 00:10

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
Gracias por sus respuestas.

rojo.pgm es un argumento que cae como "char" en el proceso escrito en C.


Y sip, graciar por hacer notar la redundancia, eso lo puse como muestra de las  distintas formas en que escribí la ruta.


AHORA, LES COMENTO:

Acabo de experimentar que cuando soy super usuario en root y corro el shell script me trae la respuesta esperada, pero si invoco el mismo script como otro usuario me da el mismo comportamiento que con GAMBAS. Ya le he concedido todos los permisos al proyecto y a los archivos involucrados, pero sigue sin darme el resultado esperado desde GAMBAS.... ¿Alguna sugerencia con respecto a la ejecución de procesos con "EXEC" O "SHELL" sus permisos??

                                                                                  :idea:


-----------------------------------
shordi
Viernes, 09 Enero 2015, 00:48

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
Eso es complicado de contestar sin conocer todo el script, entorno y demás... pero se soluciona ejecutándolo con permisos de super usuario.

Prueba aquello de 

Shell "echo clavedeusuario | sudo -S script y parametros"

Naturalmente el usuario cuya clave envíes con echo ha de ser uno con permiso de sudoer. 

Saludos


-----------------------------------
ivanolete
Viernes, 09 Enero 2015, 02:43

Re: Al Ejecutar Shell Script Desde Gambas No Toma Los Parametros Completos
-----------------------------------
He seguido tu sugerencia, Shordi.... Y ha funcionadoooooo  :mryellow: 

GRACIAS

así deje el escript:


[code linenumbers=false syntax=gambas]
#!/bin/bash
echo raspberry|sudo -S  /ruta_del_script/escanerdedo verify $1
[/code]


Por el momento así lo dejaré , pero continuaré documentandome con  respecto a los permisos de usuario en el sistema.


