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”]