Gambas-it

Gambas3 => Programmazione => Topic aperto da: Gratisweb - 15 Ottobre 2024, 17:14:11

Titolo: shell wait
Inserito da: Gratisweb - 15 Ottobre 2024, 17:14:11
In un form metto un button con una label e nel button scrivo il seguente codice....

Public Sub Button1_Click()
  Dim cmd As String
  cmd = "gnome-terminal -- bash -c 'echo inserisci la password di root; sudo -S apt update; exec bash'"

  ' Esegui il comando in un terminale GNOME
  Shell cmd Wait

  ' Questo testo apparirà solo dopo la chiusura del terminale
  Label1.Text = "Aggiornamento finito"

End

appena clicco il button si apre il terminale per digitare la password di root ed eseguire sudo apt update ma il problema è che nella label1 immediatamente appare "Aggiornamento finito" quando ancora devo scrivere la password sul terminale.......

Come se il wait non aspetta la chiusura del terminale
Titolo: Re:shell wait
Inserito da: vuott - 15 Ottobre 2024, 20:41:30
E' corretto -- bash oppure --bash" ?
E' corretto 'echo inserisci la password di root; sudo -S apt update; exec bash' oppure 'echo inserisci la password di root'; sudo -S apt update; exec bash
Sono corretti come separatori i punto e virgola ";", oppure sono necessarie le virgole oppure il carattere "|" ?
Titolo: Re:shell wait
Inserito da: Gratisweb - 15 Ottobre 2024, 22:18:03
Public Sub Button1_Click()

  Dim cmd As String
  cmd = "gnome-terminal -- sudo apt update"

  ' Esegui il comando in un terminale GNOME
  Shell cmd Wait

  ' Questo testo apparirà solo dopo la chiusura del terminale
  Label1.Text = "Aggiornamento finito"

End

Problema uguale
Titolo: Re:shell wait
Inserito da: vuott - 15 Ottobre 2024, 23:49:55
Verifica questo esempio semplice:
Codice: [Seleziona]
Public Sub Button1_Click()

  Shell "gnome-terminal -x sudo -S ls" Wait

  Print "passo"

End


Ai lettori del nostro forum suggeriamo a tal riguardo anche la lettura delle seguente pagine:
   https://www.gambas-it.org/wiki/index.php/Inserire_le_password_per_lanciare_comandi
   https://www.gambas-it.org/wiki/index.php/Lanciare_da_un%27applicazione_Gambas_il_Terminale_e_far_partire_da_esso_un_programma
Titolo: Re:shell wait
Inserito da: Gratisweb - 16 Ottobre 2024, 08:39:16

Non funziona, appena clicco il button subito scrive la stringa passo  mentre il terminale è aperto

Verifica questo esempio semplice:
Codice: [Seleziona]
Public Sub Button1_Click()

  Shell "gnome-terminal -x sudo -S ls" Wait

  Print "passo"

End



Ai lettori del nostro forum suggeriamo a tal riguardo anche la lettura delle seguente pagine:
   https://www.gambas-it.org/wiki/index.php/Inserire_le_password_per_lanciare_comandi
   https://www.gambas-it.org/wiki/index.php/Lanciare_da_un%27applicazione_Gambas_il_Terminale_e_far_partire_da_esso_un_programma
Titolo: Re:shell wait
Inserito da: vuott - 16 Ottobre 2024, 09:23:44
A me quel codice funziona (usando il nome del terminale, terminator, della mia distribuzione Linux Manjaro).
Purtroppo di più non posso aiutarti, giacché io, avendo Manjaro come distribuzione, non dispongo del terminale "gnome-terminal".
Titolo: Re:shell wait
Inserito da: Gratisweb - 16 Ottobre 2024, 09:28:18
Ma la scritta Passo appare immediatamente con il terminale aperto che mi cerca la password di root, deve apparire quando chiudo il terminale e non quando resta aperto
Titolo: Re:shell wait
Inserito da: vuott - 16 Ottobre 2024, 09:31:54
Ma la scritta Passo appare immediatamente con il terminale aperto che mi cerca la password di root, deve apparire quando chiudo il terminale e non quando resta aperto
Sì, certo, questo era chiaro.

Spero che qualche utente, che possiede "gnome-terminal", possa fare delle verifiche e risolvere il problema.
Comunque è così strano...
Titolo: Re:shell wait
Inserito da: vuott - 16 Ottobre 2024, 09:50:26
Una soluzione potrebbe giungere omettendo l'uso del terminale, e usando la funzione nativa "InputBox()" per inserire la tua password, e poi con "Shell" passarla mediante il comando "echo".
Titolo: Re:shell wait
Inserito da: vuott - 17 Ottobre 2024, 01:59:34
...sempre tralasciando il terminale, potresti usare anche il Metodo ".RunAsRoot()" della Classe "Desktop", attivando il Componente "gb.desktop":
Codice: [Seleziona]
Public Sub Button1_Click()

  Desktop.RunAsRoot("apt update", True)

End