Linux shell: 为什么 "send" 命令没有 运行

Linux shell: why "send" command doesn't run

我需要一些有关以下代码的帮助。我只需要完成一些最简单的任务。 bakcup 并替换一些 ssl 证书文件。但它似乎不起作用。以下代码有什么问题:

import_esx() {
local username=root
local backuptimestamp=$(date +"%m-%d-%y-%I:%M:%S_%p")

/usr/bin/expect << EOF
set timeout 30
spawn ssh -l $username $Ip_Address
expect {
        "(yes/no)?" { send "yes\r"; exp_continue }
        "*?assword: " { send "$CommonPassword\r"; exp_continue}
}

send_user "Backing up current certificates\r"
send "mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.$backuptimestamp\r"
send "mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.$backuptimestamp\r"
send "mv /etc/vmware/ssl/castore.pem /etc/vmware/ssl/castore.pem.$backuptimestamp\r"


EOF
}

谢谢 杰瑞

expect {
        "(yes/no)?" { send "yes\r"; exp_continue }
        "*?assword: " { send "$CommonPassword\r"; exp_continue}
}

exp_continue 在每个分支上:你必须期待其他东西,这样你才能停止循环。

在每次发送之前,您应该期待一些东西,通常是 shell 提示。此外,在最后一个 mv 命令之后,您需要 send "exit\r" 然后 expect eof

假设您的 shell 提示以“dollar space”结尾,您可以将它们放在一起:

set prompt {[$] $}

expect {
    "(yes/no)?" { send "yes\r"; exp_continue }
    "*?assword: " { send "$CommonPassword\r"; exp_continue}
    -re $prompt
}
send_user "Backing up current certificates\r"
send "mv /etc/vmware/ssl/rui.key /etc/vmware/ssl/rui.key.$backuptimestamp\r"

expect -re $prompt
send "mv /etc/vmware/ssl/rui.crt /etc/vmware/ssl/rui.crt.$backuptimestamp\r"

expect -re $prompt
send "mv /etc/vmware/ssl/castore.pem /etc/vmware/ssl/castore.pem.$backuptimestamp\r"

expect -re $prompt
send "exit\r"
expect eof