期望脚本可以在“交互”后继续执行其他命令吗?

时间:2011-09-27 11:59:31

标签: expect

大家好我是新手,希望编写脚本,我正在编写一个脚本来运行ssh以便登录远程主机,在完成所有操作后,我输入exit并注销。但我希望脚本继续运行并在本地主机上写入日志。脚本类似于:

#!/usr/bin/expect
spwan ssh qwerty@remote_host

expect {
    "password:" {
        send "123123\r"
    }
}

interact;
send "echo $(date) >> login_history.log\r"

但是最后一个命令“send ...”总是失败,并显示错误信息 “send:spawn id exp4 not open ...”

当我从远程主机注销时,期望脚本能否在本地主机上运行时继续工作?非常感谢。

1 个答案:

答案 0 :(得分:4)

是的,处理可以在[交互]之后继续。

简答:将最后{send ...}更改为{exec date>> login_history.log}

您需要了解几个概念才能实现您所追求的控制流程。首先,http://www.cotse.com/dlf/man/expect/interact_cmd_desc.htm提供了一个简洁的概要和中间[交互]使用的例子。

第二:为什么你看到消息“......产生id ......没有打开......”?因为spawn id未打开。您编写的脚本实际上是“交互,然后,在交互完成后,将新命令发送到ssh进程”。如果您已经注销,那么当然不再提供已解散过程的ID。

第三:你如何实现自己想要的目标?我不确定你想要什么。 声音好像你只需转换[发送]就好了,如上所述。那对你来说怎么样?