2010-06-30 6 views
10

Lauf zu arbeiten:Wie wird man erwarten -c in einzelnen Zeilen anstatt Skript

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 }}" 

Scheint nicht zu arbeiten, wie ich nach wie vor für das Passwort gefragt werde.

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: 

Wenn ich es als ascript ausführen läuft es ok.

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$ 

Ich möchte dies in einem einzeiligen Befehl anstelle eines Skripts ausführen. Hat jemand irgendwelche Ideen?

Vielen Dank im Voraus

A

antwortete ich meine eigene Frage unter

Antwort

10

Verstanden: Die folgenden Code scps eine Datei Sean_Lilly.zip aus meiner Box zu einem anderen Feld genannt, ohne ein Passwort eingeben:

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%\";" 

ich das wissen kann getan werden, indem passwordless ssh Zugang zwischen den zwei Kästen eingestellt wird, aber ich wollte es in einer Befehlszeile mit expect tun. Danke Fuzzy Lollipop für die Inspiration. Beachten Sie, wenn Sie erwarten, -d -c "spawn ... Sie erhalten hervorragende Debugging auf, was passiert, einschließlich, ob Ihre Regex ist gut genug

+1

Schön, auf OS X ersetzen Sie '\ r \ n' mit nur' \ r'. – funroll

2

Sie sind am Ende des letzten Befehls ein ; auf dem ersten Zeile Beispiel fehlen. Und es gibt eine bessere Möglichkeit, das Passwort passgenau zu gestalten.

versuchen Sie Folgendes:

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

keine Fehler, aber die Datei wurde nicht über – amadain

+0

kopiert, die etwas stillschweigend sein könnte, wie das falsche Passwort oder etwas –

+0

dachte an das. Wenn Sie den Befehl ausführen, druckt es den Spawn, den es verwendet. Ich kopierte den Spawn in die Shell und gab das Passwort wie oben und es funktionierte manuell. Wenn das Muster richtig übereinstimmt scheint nicht das Passwort – amadain