2010-06-30 20 views
10

Chạy:Làm thế nào để có được mong đợi -c làm việc trong dòng duy nhất chứ không phải là kịch bản

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

Không có vẻ để làm việc như tôi vẫn còn yêu cầu mật khẩu.

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: 

Nếu tôi chạy nó như ascript nó chạy 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$ 

Tôi muốn chạy lệnh này trong một dòng lệnh thay vì tập lệnh. Có ai có ý tưởng nào?

Cảm ơn trước

Một

Tôi đã trả lời câu hỏi của riêng tôi dưới đây

Trả lời

10

Got it: Các SCPS mã sau một tập tin gọi Sean_Lilly.zip từ hộp của tôi để hộp khác mà không cần nhập mật khẩu:

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

Tôi biết điều này có thể được thực hiện bằng cách thiết lập truy cập ssh không mật khẩu giữa hai hộp nhưng tôi muốn làm điều đó trong một dòng lệnh bằng cách sử dụng mong đợi. Cảm ơn kẹo mờ cho cảm hứng. Lưu ý nếu bạn chạy mong đợi -d -c "đẻ trứng ... bạn sẽ nhận được gỡ lỗi tuyệt vời về những gì đang xảy ra bao gồm cả liệu regex của bạn có đủ tốt không?

+1

Trên OS X, thay thế '\ r \ n' chỉ bằng' \ r'. – funroll

2

Bạn đang thiếu một ; trên ví dụ một dòng đầu tiên vào cuối của lệnh cuối cùng. Và có cách tốt hơn để khớp mẫu với mật khẩu.

hãy thử như sau:

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

không có lỗi nhưng tệp không được sao chép trên – amadain

+0

. sai mật khẩu hoặc một cái gì đó –

+0

nghĩ rằng khi bạn chạy lệnh nó in ra đẻ trứng mà nó sử dụng.Tôi sao chép các đẻ trứng vào vỏ và đã cho mật khẩu như trên và nó làm việc bằng tay.Nếu mô hình được kết hợp một cách chính xác nó dường như không gửi mật khẩu – amadain