如何在expect脚本中复制两个文件?

如何在expect脚本中复制两个文件?

请告知为什么

spawn  scp  $FILE1   $FILE2  $LOGIN@$IP:/tmp

在我的期望脚本中仅复制 FILE1 而不是复制 FILE2 ?

我尝试通过 scp 传输两个文件

 scp file1.csv file2.crt 192.8.200.1:/tmp 

出乎意料,他们成功转移到/tmp

那么为什么 VIA 期望唯一复制的文件是文件1??

我的语法有什么问题吗?

我的期望脚本的示例:

 #!/usr/bin/expect -f
 set FILE1  file1.csv
 set FILE2  file2.crt
 set multiPrompt {[#>$]}
 spawn  scp  $FILE1   $FILE2  $LOGIN@$IP:/tmp
           expect {
                     ")?"   { send "yes\r"  ; exp_continue  }

                    word:  {send $PASS\r}
                   }

我也尝试这个:

spawn  scp  "$FILE1   $FILE2"   $LOGIN@$IP:/tmp

或者

spawn  scp  '$FILE1   $FILE2'   $LOGIN@$IP:/tmp

但我遇到了同样的问题

答案1

expect我为此编写了以下脚本,并且它可以工作(在我的虚拟机上)。示例运行:

./scp.exp <first host user> <first host user pass> <first host name> <second host name> <second host user> <second host user pass> <directory path i.e. /tmp>

脚本:

#!/usr/bin/expect -f
# ./sshlogin.exp uptime
# set Variables

set user [lindex $argv 0];
set password [lindex $argv 1];
set host [lindex $argv 2];
set copy_to_host [lindex $argv 3];
set copy_to_host_user [lindex $argv 4];
set copy_to_host_pass [lindex $argv 5];
set copy_to_host_dir [lindex $argv 6];
set file1 one.txt;
set file2 two.txt;
set timeout 10
# now ssh
spawn ssh $user@$host -o StrictHostKeyChecking=no
match_max 100000 # Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
expect "*$ "
send -- "scp -o StrictHostKeyChecking=no $file1 $file2 $copy_to_host_user@$copy_to_host:$copy_to_host_dir\r"
expect "*?assword:*"
send -- "$copy_to_host_pass\r"
expect "*$ " 
send -- "exit\r"
expect eof

expect注意:如果处理大文件,您可能需要增加一些等待时间。

相关内容