大家好我是新手,希望编写脚本,我正在编写一个脚本来运行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 ...”
当我从远程主机注销时,期望脚本能否在本地主机上运行时继续工作?非常感谢。
答案 0 :(得分:4)
是的,处理可以在[交互]之后继续。
简答:将最后{send ...}更改为{exec date>> login_history.log}
您需要了解几个概念才能实现您所追求的控制流程。首先,http://www.cotse.com/dlf/man/expect/interact_cmd_desc.htm提供了一个简洁的概要和中间[交互]使用的例子。
第二:为什么你看到消息“......产生id ......没有打开......”?因为spawn id未打开。您编写的脚本实际上是“交互,然后,在交互完成后,将新命令发送到ssh进程”。如果您已经注销,那么当然不再提供已解散过程的ID。
第三:你如何实现自己想要的目标?我不确定你想要什么。 声音好像你只需转换[发送]就好了,如上所述。那对你来说怎么样?