Newsgroup: it.comp.macintosh
Titolo: hdiutil: affidabilità negli script

Ho scritto il seguente script bash:
------
#! /bin/bash
die() { echo "$0: $1" 1>&2 > "$errFile" ; exit ${2:-1}; }
isoPath="$1"
errFile="$2"
if echo $(drutil status -drive 1) | grep Writability | grep -q "blank";
then hdiutil burn -device
'IOService:/MacRISC4PE/ht@0,f2000000/AppleMacRiscHT/pci@9/IOPCI2PCIBridge/ata-6@D/AppleKauaiATA/ATADeviceNub@0/IOATAPIProtocolTransport/IOSCSIPeripheralDeviceNub/IOSCSIPeripheralDeviceType05/IODVDServices'
"$isoPath" || die "Failed to burn $isoPath"
else die "Inserted media is not writable"
fi
------
In cui errfile è il nome del file in cui memorizzo il messaggio
d'errore e isoPath è la locazione dell'immagine iso. Questo script
viene richiamato da un programmino C e serve per fare backup automatici
(la iso viene precedentemente creata con mkisofs ed viene sempre creata
correttamente).
L'hardware sottostante è un Power Mac G5 con masterizzatore HL-DT-ST
DVD-RW GWA-4165B  C006. I supporti da me utilizzati sono DVD-R Imation
16x.
Il mio problema è che la maggior parte delle volte mi viene segnalato
il messaggio d'errore "Failed to burn $isoPath" (indicante che qualcosa
è andato storto con hdiutil) anche se il DVD è venuto bene (md5 di
ogni singolo file identica all'md5 degli originali). Nel log
Library/Logs/DiscRecording.log che si trova nella home dell'utente che
masterizza trovo le seguenti linee:
hdiutil: Burn started, Thu May  4 15:06:06 2006
hdiutil: Burning to DVD-R media with DAO strategy in HL-DT-ST DVD-RW
GWA-4165B C006 via ATAPI.
hdiutil: Requested burn speed was 47x, actual burn speed is 4x.
hdiutil: Burn underrun protection is supported, and enabled.
hdiutil: Burn finished, Thu May  4 15:19:22 2006
hdiutil: Verify started, Thu May  4 15:19:22 2006
hdiutil: Verify finished, Thu May  4 15:25:12 2006
Che non sembrano comunicare errori.
Qualcuno ha un problema simile o sa indicarmi una via di soluzione? Ho
googlato in lungo e in largo senza trovare una soluzione, sono
piuttosto disperata :(

 ogni singolo file identica all'md5 degli originali).
Non conosco bene la sintassi di bash, quindi non posso entrare nello 
specifico.
Come primo tentativo, controllerei quali codici ritorna hdiutil nei vari
casi.
Ad esempio, se il codice che sta per "tutto OK" non dovesse essere 0 (o
cmq quello che lo script assume), la cosa potrebbe far scattare
indebitamente il messaggio d'errore.
-- 
.: Jazzman :.
"Ancora oggi sorprende la velocità con cui cadono le pietre: troppo
veloci per essere misurate. E invece no."               (A.Zichichi)

 ogni singolo file identica all'md5 degli originali).
l'OR viene valutato se il comando hdiutil restituisce 0, che indica
completamento con successo.
Non e' che stai facendo confusione con un linguaggio che ritorna TRUE in
caso di successo, come il PHP?
-- 
Tutte le macchine al potere, gli uomini a pane ed acqua

Grazie per il suggerimento ma in bash funziona al contrario, quindi
manda fallimento qualora hdiutil restituisca != 0
Avevo pensato anch'io che potesse essere quello ed ho indagato meglio
(lo script l'ho arrricchito ma lo scheletro non l'ho scritto io)

Il tuo suggerimento è decisamente corretto. In effetti ho provato a
disabilitare il verify ed il problema si è presentato ugualmente,
segno che hdiutil restituisce un valore != 0 perché qualcosa (anche se
non so cosa) va storto. Il punto è perché lamentarsi se sia la
masterizzazione che il verify sono stati eseguiti correttamente (come
risulta dal DiscRecording.log)?

Visto che il tipo di errore restituito da hdiutil spesso si è rivelato
svincolato dalla riuscita della masterizzazione ho risolto così:
- Ridireziono su un file temporaneo standard input ed error di hdiutil
- In caso hdiutil restituisca in "$?" (variabile d'errore di bash) un
valore diverso da zero confronto il contenuto del file temporaneo con
il contenuto di un file fisso in cui ho memorizzato strandard output e
error di hdiutil quando la masterizzazione e la verifica vanno a buon
fine.
- Se i file risultano differenti restituisco errore, altrimenti
considero valida la masterizzazione.
Grazie a tutti per l'aiuto.