Ho intenzione di crearmi un sistema di “nightly build” per flatnuke in modo che in automatico, tramite crontab, ogni giorno vada a scaricare il cvs da sourceforge e mi costruisca il tar già pronto da utilizzare senza tutte le directory CVS.

Il primo problema da affrontare è il login anonymous del cvs; infatti richiede almeno la pressione del tasto ENTER per effettuare l’autenticazione senza inserire nessuna password. Prendendo spunto da altri servizi come ftp e telnet, ho provato svariati metodi tra cui “here document” (“<<EOF”)  oppure a usare una pipe (|) per passare user e password ma nessuno di questi ha funzionato.

Allora mi sono ricordato del comando expect (da installare tramite il proprio gestore di pacchetti) che serve per interagire con i programmi che richiedono l’inserimento di dati (tipicamente user e password). Praticamente si dice a expect che cosa aspettarsi dal comando e di conseguenza mandare la risposta giusta. Nel nostro caso cvs si presenterà a terminale con la stringa esatta “CVS password:” e noi tramite il comando send spediremo un carriage return “(\r) o ^M” in modo da simulare la pressione del tasto INVIO.

#!/usr/bin/expect

spawn cvs -d:pserver:[email protected]:/cvsroot/flatnuke login
expect "CVS password:"
send "\r"
interact
spawn cvs -z3 -d:pserver:[email protected]:/cvsroot/flatnuke co -P flatnuke
interact
exit

Esempio di sintassi here document (che non funziona nel caso di cvs)

ftp -i -n otherhost << EOF
user myname mypassword
mput foo bar
EOF

Esempio di sintassi con pipe:

echo "
user myname mypassword
mput foo bar
" | ftp -i -n otherhost

oppure con telnet:

#!/bin/sh
tpipe() {
sleep 3;echo myname
sleep 1;echo mypassword
}
tpipe | telnet otherhost

[ad name=”HTML”]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.