gpt4 book ai didi

expect - "interact"之后expect脚本还能继续执行其他命令吗?

转载 作者:行者123 更新时间:2023-12-01 21:49:33 26 4
gpt4 key购买 nike

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

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

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

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

但是最后一个命令“发送...”总是失败,并显示错误消息,例如“发送:spawn id exp4 未打开...”

当我从远程主机注销时,expect 脚本可以像在本地主机上运行一样继续工作吗?

最佳答案

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

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

为了实现您想要的控制流,您需要了解几个概念。第一,http://www.cotse.com/dlf/man/expect/interact_cmd_desc.htm提供了简洁的概要和中间[交互]使用的示例。

第二:为什么您会看到消息“...spawn id...not open...”?因为spawn id没有开放。您编写的脚本实际上表示“进行交互,然后在交互结束后,向 ssh 进程发送一个新命令”。如果您已经注销,那么,失效进程的 ID 当然不再可用。

第三:你如何实现你想要的?我不确定你想要什么。 听起来好像您只需按照我上面的描述来转换 [send] 就足够了。您觉得怎么样?

关于expect - "interact"之后expect脚本还能继续执行其他命令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com