Torna indietro   Hardware Upgrade Forum > Software > Linux, Unix, OS alternativi

DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve
Dopo quasi un mese di utilizzo quotidiano e un viaggio medio-lungo in autostrada, raccontiamo pregi e limiti della Geely EX5: comfort premium, batteria LFP da 60,22 kWh, autonomia fino a 430 km e un prezzo che parte da 38.900 €
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-07-2011, 17:46   #1
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
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..............
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2011, 19:52   #2
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
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.
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 00:43   #3
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
mmm.. provo.. e questo praticamente va nell'1.sh subito dopo aver richiamato il 2.sh giusto ?
__________________
Un tizio entra in un BAR..............
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 09:42   #4
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
si va nel file 1.sh
tieni conto che:
2.sh &
già esegue il file 2.sh (in background).
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:08   #5
zarazoski
Bannato
 
Iscritto dal: Jan 2010
Messaggi: 240
Quote:
Originariamente inviato da DjDiabolik Guarda i messaggi
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 ?
perche', se in 1.sh chiami semplicemente 2.sh cosa succede ?
zarazoski è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:41   #6
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
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
...
...
Ma non riesco ad ottenere ciò che voglio io.....
__________________
Un tizio entra in un BAR..............
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:43   #7
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
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.
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:46   #8
zarazoski
Bannato
 
Iscritto dal: Jan 2010
Messaggi: 240
Quote:
Originariamente inviato da DjDiabolik Guarda i messaggi
...

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.


e richiamarlo semplicemente con .\2.sh ?
zarazoski è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:59   #9
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
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..
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 11:59   #10
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
Quote:
Originariamente inviato da zarazoski Guarda i messaggi


e richiamarlo semplicemente con .\2.sh ?
gia provato non funziona.......

Anche mettendo il wait sembra non funzionare.... è alquanto strano.
__________________
Un tizio entra in un BAR..............
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 13:13   #11
zarazoski
Bannato
 
Iscritto dal: Jan 2010
Messaggi: 240
Quote:
Originariamente inviato da DjDiabolik Guarda i messaggi
gia provato non funziona.......

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 )
zarazoski è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 19:51   #12
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
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
e l'1.sh ora è cosi:
Codice:
#!/bin/sh

./2.sh &
wait

exit 0
Ricapitolo.. in pratica io eseguo l'1.sh che al suo termine mostra un'output a schermo da se..... però per far andare i wget devo per forza eseguirli nell'sh esterno altrimenti non so per quale motivo i wget non vanno (seppur ho impostato correttamente gli attributi e vengono eseguiti anch'essi da un patch con attributi 777).
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 19:54.
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 21:03   #13
zarazoski
Bannato
 
Iscritto dal: Jan 2010
Messaggi: 240
editato

Ultima modifica di zarazoski : 11-07-2011 alle 21:45.
zarazoski è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 21:45   #14
zarazoski
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 capisco il -P e il -O che sono in conflitto, e il grep
non sara' meglio farlo cosi' ?:
Codice:
wget -q -O /tmp/ReloadNetwork.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadNetworks"
cat /tmp/ReloadNetwork.logreload
comunque non ha senso fare due script: lancia direttamente il 2.sh

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 21:49.
zarazoski è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 23:06   #15
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
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:
Ricapitolo.. in pratica io eseguo l'1.sh che al suo termine mostra un'output a schermo da se..... però per far andare i wget devo per forza eseguirli nell'sh esterno altrimenti non so per quale motivo i wget non vanno (seppur ho impostato correttamente gli attributi e vengono eseguiti anch'essi da un patch con attributi 777).
cosa vuol dire non vanno?

Quote:
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.
non capisco, da quegli script è 2.sh che stampa l'output, non 1.sh, e come fa 1.sh a ritornare senza prima aver eseguito tutto
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 : 11-07-2011 alle 23:48.
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 23:48   #16
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
Quote:
Originariamente inviato da zarazoski Guarda i messaggi
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 capisco il -P e il -O che sono in conflitto, e il grep
non sara' meglio farlo cosi' ?:
Codice:
wget -q -O /tmp/ReloadNetwork.logreload "http://root:xxxxxx@localhost/cgi-bin/reloadNetworks"
cat /tmp/ReloadNetwork.logreload
comunque non ha senso fare due script: lancia direttamente il 2.sh

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...
Allora se lo lanci da telecomando.. dal pannello di controllo e dalla sezione script il wget non funziona.

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..............
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 23:53   #17
blair
Senior Member
 
Iscritto dal: Jan 2006
Messaggi: 466
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.
che il -P faccia quello siamo daccordo, il problema è utilizzardo insieme a -O..
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:
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.
il problema non è lo script, prova a lanciarlo da una qualsiasi console e vedrai che funziona...
blair è offline   Rispondi citando il messaggio o parte di esso
Old 11-07-2011, 23:54   #18
DjDiabolik
Senior Member
 
Iscritto dal: Aug 2004
Messaggi: 1404
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 : 11-07-2011 alle 23:59.
DjDiabolik è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2011, 09:02   #19
zarazoski
Bannato
 
Iscritto dal: Jan 2010
Messaggi: 240
Quote:
Originariamente inviato da DjDiabolik Guarda i messaggi
Allora se lo lanci da telecomando.. dal pannello di controllo e dalla sezione script il wget non funziona.

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.
negativo su tutta la linea
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)
zarazoski è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Recensione Google Pixel 11: non ha l'HiLight dei Pro, ma è il Pixel più equilibrato di sempre Recensione Google Pixel 11: non ha l'HiLight dei...
Proxmox annuncia il supporto 24/7 e l'ap...
Esperto smonta le previsioni no-IA con b...
Motorola edge 70 plus, una versione di r...
Lenovo porta l'IA nei PC business: Think...
Lenovo IdeaPad Vibe cambia look: sette c...
Fino a 3,4 GHz per la prossima generazio...
Lenovo lancia i nuovi Yoga AI: due PC co...
Il tuo PC da gaming può aiutare g...
Audio senza cuffie per una persona sola:...
A IFA 2026 Hisense mette l'IA al centro ...
Accusata di favoreggiamento nella strage...
Braccia rubate all'agricoltura: John Dee...
HONOR non si ferma più: arriva anche il ...
Nexus, il mercato nero che ha messo in v...
NVIDIA acquisisce Hugging Face per 12,93...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:23.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v