|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
Niubbo chiede supporto su lancio secondo file .sh da primo .sh...
Ciao ragazzi.. in pratica vi spiego cos'è che voglio ottenere:
Io ho 2 file .sh... esempio 1.sh e 2.sh... io parto con l'esecuzione di 1.sh che all'interno poi richiama il 2.sh. A questo punto però mentre il 2.sh è in esecuzione a me serve che l'1.sh aspetti il termine del 2.sh e non che i due file siano processati in multitasking. In pratica essendo un pò + bravino su ambiente windows e nello scripting in batch voglio ottenere quello che invece il batch fa normalmente.... perchè proprio se da un batch io richiamo un secondo file batch il primo interrompe l'esecuzione e aspetta il terminare del secondo batch..... Sono stato chiaro ?
__________________
Un tizio entra in un BAR..............
![]() |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
puoi provare ad usare il comando wait, nel tuo caso sarebbe una cosa del tipo:
2.sh & PID=$! wait $PID oppure 2.sh & wait wait ferma l'esecuzione dello script finchè tutti i jobs in background non sono terminati, oppure finchè il job (job id) o processo (process id) passati terminano. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
mmm.. provo.. e questo praticamente va nell'1.sh subito dopo aver richiamato il 2.sh giusto ?
__________________
Un tizio entra in un BAR..............
![]() |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
si va nel file 1.sh
tieni conto che: 2.sh & già esegue il file 2.sh (in background). |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
perche', se in 1.sh chiami semplicemente 2.sh cosa succede ?
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
allora nel 2.sh uso un paio di volte il comando wget poi di volta in volta mi costruisco un output da mostrare a schermo.
Non riesco a capire perchè se io implemento i wget nel 1.sh quest'ultimi non funzionano e bloccano l'esecuzione dello script stesso mentre cosi appunto messi un file .sh a parte vengono eseguiti tranquillamente. Cmq sia l'1.sh al suo termine mostra a schermo un'output cioè l'output generato dal 2.sh (in pratica una sorta di log dei comandi wget) però a me appunto tutt'ora accade che: - lancio 1.sh - 1.sh richiama il 2.sh usando appunto ".\2.sh &" l'1.sh non mi aspetta la fine dell'esecuzione del 2.sh ma me lo esegue tipo multitasking e quindi poi genera tutti errori appunto perchè non trova i log generati. Ho provato a mettere uno "sleep x" ma non so poi quando potrebbero impiegare i 3 wget..... cercando in rete ho poi trovato un suggerimento che diceva di mettere "wait" subito dopo la chiamata al 2.sh quindi ho fatto x esempio : Codice:
... ... .\2.sh & wait ... ...
__________________
Un tizio entra in un BAR..............
![]() |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
a seconda di come è fatto il file richiamato può funzionare o meno
Ad esempio: file 2.sh: #!/bin/bash echo 2 - start sleep 3 & echo 2 - stop file 1.sh: #!/bin/bash echo 1 - start . 2.sh echo 1 - stop se esegui 1.sh avrai come output: 1 - start 2 - start 2 - stop 1 - stop ma il programma termina immediatamente senza aspettare 3 secondi, questo perchè un comando/programma nel file richiamato è andato in background. Modificando 2.sh aggiungendo semplicemente il comando wait in questo modo: #!/bin/bash echo 1 - start . 2.sh wait echo 1 - stop si risolve questa eventualità. Ovvio poi che a seconda dei casi bisogna prestare attenzione ed usare la soluzione migliore. |
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
Quote:
e richiamarlo semplicemente con .\2.sh ? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
se c'è qualche programma che forka in background ovviamente richiamarlo direttamente non funziona, con il wait dovrebbe, se non funziona nemmeno così, beh bisogna vedere il tuo 2.sh, dovresti postarlo così ci rendiamo conto..
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
gia provato non funziona.......
Anche mettendo il wait sembra non funzionare.... è alquanto strano.
__________________
Un tizio entra in un BAR..............
![]() |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
se lo chiami nel modo piu' semplice, la chiamata diretta e' sincrona: quando termina il 2.sh, l'esecuzione ritorna al 1.sh lascia perdere le & e wait evidentemente fai qualche pasticcio nel 2.sh con i wget: quoto blair, prova a postarlo (se non c'e' niente di riservato |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
allora.... il 2.sh è questo:
Codice:
#!/bin/sh echo echo " Reload Setting in corso.." echo echo "_____________________________" echo sleep 3 echo "Reload Network" wget -q -P /usr/bin -O /tmp/ReloadNetwork.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadNetworks" ReloadNetwork="$(grep "" /tmp/ReloadNetwork.logreload)" echo $ReloadNetwork echo echo "Reload Setting" wget -q -P /usr/bin -O /tmp/ReloadSetting.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadSettings" ReloadSetting="$(grep "" /tmp/ReloadSetting.logreload)" echo $ReloadSetting echo echo "Reload UserBouquets" wget -q -P /usr/bin -O /tmp/ReloadUserBouquets.logreload "http://root:xxxxx@localhost/cgi-bin/reloadUserBouquets" ReloadUserBouquets="$(grep "" /tmp/ReloadUserBouquets.logreload)" echo $ReloadUserBouquets echo echo echo "Reload settings riuscito, premere EXIT per chiudere la finestra.." rm -f /tmp/*.logreload exit 0 Codice:
#!/bin/sh ./2.sh & wait exit 0 Però cosi facendo io ottengo l'output a schermo quando invece in background il 2.sh è ancora in esecuzione.....e quindi l'output a schermo (che sono quindi i vari echo) escono troncati. *EDIT* Pensavo non fosse necessario ma a questo punto lo dico... è un decoder Enigma1.
__________________
Un tizio entra in un BAR..............
![]() Ultima modifica di DjDiabolik : 11-07-2011 alle 20:54. |
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
editato
Ultima modifica di zarazoski : 11-07-2011 alle 22:45. |
|
|
|
|
|
#14 |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
Codice:
wget -q -P /usr/bin -O /tmp/ReloadNetwork.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadNetworks" ReloadNetwork="$(grep "" /tmp/ReloadNetwork.logreload)" echo $ReloadNetwork non sara' meglio farlo cosi' ?: Codice:
wget -q -O /tmp/ReloadNetwork.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadNetworks" cat /tmp/ReloadNetwork.logreload e finalmente ho capito che non avevo capito cosa volevi fare per la cronaca, ho copiato il tuo script 2.sh su un mio decoder (ho solo tolto il -P dal wget) e funziona... Ultima modifica di zarazoski : 11-07-2011 alle 22:49. |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
pure io non capisco il grep...
io ho provato i due script e funzionano perfettamente (io non ho tolto il -P), ho solo cambiato path e poi ho levato quei grei sostituendoli ad un cat. ps: ha ragione zarazoski riguardo il -P... Quote:
Quote:
E' possibile che se i file sono quandi l'ultima stampa richieda un determinato tempo ed il processo termini prima che tutto l'output sia stato visualizzato. E' questo il problema? ps: puoi anche eliminare i file intermedi in questo modo: Codice:
VAR1=`wget -qO - "http://....."` echo "$VAR1" Ultima modifica di blair : 12-07-2011 alle 00:48. |
||
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
Quote:
il -P è per far eseguire il wget da una cartella con le autorizzazioni.... poi il grep e l'echo è per far si di fare andare a capo il tutto e far mostrare un'output almeno un pò ordinato perchè ho provato col cat solo e mi stampava tutto su una riga. Ho provato in diversi modo ma come detto provate a lanciare lo script dal pannello di controllo e vedrete che non funziona ovviamente rinominato tipo script00.sh.
__________________
Un tizio entra in un BAR..............
![]() |
|
|
|
|
|
|
#17 | ||
|
Senior Member
Iscritto dal: Jan 2006
Messaggi: 465
|
Quote:
per quanto riguarda la stampa, è normale che un echo stampi in quella maniera, per ovviare al problema basta mettere il testo da stampare tra virgolette, ad esempio: Codice:
VAR1=`wget -qO - "http://....."` echo "$VAR1" Quote:
|
||
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Aug 2004
Messaggi: 1382
|
si che da console funziona... ma io è da telecomando che devo lanciarlo
*EDIT* E se lo lanci da telecomando non so il motivo ma il wget non viene eseguito... e si blocca l'esecuzione.
__________________
Un tizio entra in un BAR..............
![]() Ultima modifica di DjDiabolik : 12-07-2011 alle 00:59. |
|
|
|
|
|
#19 | |
|
Bannato
Iscritto dal: Jan 2010
Messaggi: 240
|
Quote:
ieri ho fatto dei test sul mio DB enigma1 -a me funziona anche lanciato da telecomando come userscript (l'ho messo come /var/scripts/prova_userscript.sh) dopo un chmod a+x ovviamente. Dove lo metti tu ? -il -P serve per impostare la cartella dove scaricare (-P Set directory prefix to DIR) -grep o cat: cosa devi formattare ? a me ritorna solo 3 caratteri "+ok" (in caso di errore non lo so) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:27.





















