2010-06-30 4 views
10

Esecuzione:Come ottenere aspettarsi -c per lavorare in un'unica linea, piuttosto che lo script

my_machine~/opt/ams/data/ep/success$ expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml [email protected]:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect { '*password:*' { send 'ad'\r\n }}" 

non sembra lavorare come sto ancora chiesto di inserire la password.

spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml [email protected]:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml 
[email protected]'s password: 

Se lo eseguo come script, viene eseguito correttamente.

my_machine~/opt/ams/data/ep/success$ ./try.sh 
spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml [email protected]:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml 
[email protected]'s password: 
xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml                  100% 13MB 13.2MB/s 00:01 
my_machine~/opt/ams/data/ep/success$ cat try.sh 
#!/bin/bash 
expect -c " 
     spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml [email protected]:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml 
     expect { 
      "*password:*" { send "ad"\r\n; interact } 
      eof { exit } 
     } 
     exit 
     " 

my_machine~/opt/ams/data/ep/success$ 

Vorrei eseguire questo comando in una riga anziché in uno script. Qualcuno ha qualche idea?

Grazie in anticipo

Un

ho risposto alla mia domanda qui sotto

risposta

10

capito: Le seguenti SCPs codice di un file chiamato Sean_Lilly.zip dalla mia casella all'altra scatola senza inserire una password:

expect -c "spawn /usr/bin/scp Sean_Lilly.zip [email protected]:/opt/ams/epf_3_4/Sean_Lilly.zip; sleep 5; expect -re \"password\"; send \"ad\r\n\"; set timeout -1; expect -re \"100%\";" 

So che questo può essere fatto impostando l'accesso ssh senza password tra le due caselle ma volevo farlo in una riga di comando usando expect. Grazie al lecca-lecca fuzzy per l'ispirazione. Nota se si esegue aspettare -d -c progenie" ... si ottiene eccellente di debug su ciò che sta accadendo tra cui se la vostra espressione regolare è abbastanza

+1

Nice, su OS X sostituire '\ r \ n' con solo' \ r'. – funroll

2

ti manca un ; il primo esempio di una riga alla fine dell'ultimo comando. E c'è un modo migliore per modellare la password.

provare quanto segue:

expect -c "spawn /usr/bin/scp xmlEventLog_2010-03-22T14-28-36_PFS_1_2.xml [email protected]:/opt/ams/epf_3_4/xmlEventLog_2010-03-22T14-28-36_PFS_1277900174_2.xml; expect -re \".*password.*\"; send 'ad\r\n';" 
+0

errori buona, ma il file non è stato copiato – amadain

+0

che potrebbe essere qualcosa di non aver in silenzio, come la password errata o qualcosa del genere –

+0

pensava che, quando si esegue il comando, si stampa lo spawn che usa, ho copiato lo spawn nella shell e ho dato la password come sopra e ha funzionato manualmente.Se il pattern è stato abbinato correttamente non sembra che stia inviando la password – amadain

Problemi correlati