Newsgroup: it.comp.os.linux.sys
Titolo: bash script: aspettare la fine di un comando

Salve a tutti!
Sì, lo so che per aspettare la fine di un comando si fa così:
!#/bin/bash
#...
comando1 && comando2
#...
però il mio problema è che comando1 è un po' bastardo: è a sua
volta uno script che lancia una classe Java, che rimane in esecuzione
in background finché non esaurisce il suo compito, che è quello di
creare un file molto grosso. Ora, se comando2 è un operazione di
compressione, rischio (anzi, ho la certezza) di comprimere il file
mentre il file è ancora in scrittura, con risultati ovviamente
disastrosi. Per ora ho risolto schedulando la compressione 15 minuti
dopo la creazione del file, ma non è una soluzione molto elegante.
Qualche suggerimento?
Grazie per l'attenzione, ciao!
GePs

 Qualche suggerimento?
wait
-- 
Flavio Visentin
Membro del CICAP
Comitato Italiano per il Controllo delle Affermazioni di P4

 wait
Ok, dovrei ricavarmi il PID del processo con awk, e darlo a wait,
giusto?


 giusto?
Questo è uno dei modi. L'altro, è usare la variabile $!
man bash per ulteriori info.


 wait
Funge anche comando1 e` finito ma non i processi lanciati da comando1?
Non credo... Anzi, ho appena provato e ne sono sicuro.
In questo caso, credo sia meglio usare una soluzione del tipo verificare
se il file e` stato chiuso. Per esempio con lsof in un loop.
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 se il file e` stato chiuso. Per esempio con lsof in un loop.
Occhio che lsof richiede parecchie risorse. Si rischia di atterrare una
macchina se questa è già sotto carico. In genere è altissimamente
sconsigliabile mettere in attesa gli script con cicli di lsof, ps e
altri programmi simili; si rischia di sputtanare tutto (bastano 2 ps che
si accavallano).


 macchina se questa è già sotto carico. In genere è altissimamente
Infatti piuttosto userei 'fuser', dato che deve controllare un file
particolare.


 Qualche suggerimento?
Non puoi far nulla, in generale, dipende da come "comando1" e` fatto.
Devi trovare il modo di evitare il background alla sorgente.
bye,
-- 
piergiorgio

 se "comando1" esce con stato 0, altrimenti no.
Visto che comando2 dipende dall'esito di comando1 (ne digerisce
l'output) credo che la forma sia abbastanza corretta ;-)


 l'output) credo che la forma sia abbastanza corretta ;-)
:-) "abbastanza corretta"... O e` corretta oppure no... :-)
Scherzi a parte, il problema e` che bisogna essere sicuri al 100%
che "comando1" ritorni zero nei casi di interesse.
Altrimenti potrebbe avere dei comportamente erratici.
In particolare, visto che non riesce neanche a controllare il
sottoprocesso di "comando1" che va in background, direi che la
forma "&&" e` particolarmente rischiosa...
Comunque, sarebbe ancora meglio:
comando1 | comando2
in modo da assicurare la connessione, senza dover passare
per file temporanei.
bye,
-- 
piergiorgio