Autore Topic: shell wait  (Letto 295 volte)

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
shell wait
« il: 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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #1 il: 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 "|" ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:shell wait
« Risposta #2 il: 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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #3 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:shell wait
« Risposta #4 il: 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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #5 il: 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".
« Ultima modifica: 16 Ottobre 2024, 09:31:10 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gratisweb

  • Grande Gambero
  • ***
  • Post: 186
    • Mostra profilo
Re:shell wait
« Risposta #6 il: 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

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #7 il: 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...
« Ultima modifica: 16 Ottobre 2024, 09:33:06 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #8 il: 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".
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:shell wait
« Risposta #9 il: 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
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »