scp命令在bash脚本中没有工作

时间:2016-06-02 08:55:01

标签: bash shell expect scp

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命令无效,即远程计算机中的文件未被复制到本地计算机。

从终端运行时,scppath的{​​{1}}命令工作正常。

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)?" {