while [ $FileLine -le $FileListLines ];
do
# extract each line from FileList
str=$(tail -n+$FileLine ../$FileList | head -n1)
hostpath=$username@$ip:$str
export hostpath ip
expect -c '
spawn bash -c "scp -pr $env(hostpath) $env(ip)"
expect {
"(yes/no)?"{
send "yes\r"
expect "*?assword:*"
send "password\r"
}
"*?assword:*"{
send "password\r"
}
}
'
FileLine=$(( $FileLine + 1 ))
done
以上是bash脚本的一部分。 scp
块中的expect
命令无效,即远程计算机中的文件未被复制到本地计算机。
从终端运行时,scp
和path
的{{1}}命令工作正常。
答案 0 :(得分:1)
在期望代码的末尾添加expect eof
,否则在发送密码后会立即终止scp
进程。 (还要在{
块中的模式和expect {}
之间添加一个空格,但不确定这是否有问题。)
expect -c '
spawn bash -c "scp -pr $env(hostpath) $env(ip)"
expect {
"(yes/no)?" {
send "yes\r"
expect "*?assword:*"
send "password\r"
}
"*?assword:*" {
send "password\r"
}
}
expect eof
'
刚试过,"(yes/no)?"{
无效。 模式和{
之间的空格是必需的,因此它应该是"(yes/no)?" {
。