Potrebbe succedere che uno shell script che fa pesantemente uso di expect vi si pianti senza alcun motivo apparente. Potrebbe anche succedere che passiate delle ore a cercare di capire dove sta l'inghippo senza ottenere risultati.
Ecco allora che ci possono tornare utili alcuni piccoli magheggi da applicare al nostro script (causa di n-mila imprecazioni).
Il primo consiste nell'abilitare l'output dei comandi lanciati da expect. Per fare ciò è sufficente aggiungere exp_internal 1 allo script . Un esempio di output è il seguente:
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {22098}
expect: does "" (spawn_id exp6) match glob pattern "*?assword:*"? no
Inoltre (e sto parlando del secondo magheggio), posso garantirvi che nel 90% dei casi lo script fallisce a causa del timeout di expect. Per definire manualmente tale parametro basta inserire la seguente direttiva all'interno dello script:
set timeout <numero di secondi>
Ciò è necessario soprattutto se i comandi lanciati richiedono parecchio tempo per essere eseguiti (vedi dump di un database e copia dello stesso su una macchina remota).
Fine del post, fatene buon uso.