gpt4 book ai didi

expect - 我怎么知道我已经完成了交互模式?

转载 作者:行者123 更新时间:2023-12-04 18:51:29 24 4
gpt4 key购买 nike

我正在用 bash 编写一些期望命令。

脚本:

#!/bin/bash  
set timeout -1

expect -c "

spawn telnet $IP $PORT1
sleep 1
send \"\r\"
send \"\r\"
expect Prompt1>
interact timeout 20 {
sleep 1
}

expect {
Prompt2> {send \"dir\r\" }
}

"

我对脚本的意图是,首先让它telnet到一台机器上,当它看到Prompt1时,让它控制给我,我会执行一个命令来加载一个特定的图像。然后等待 Prompt2 出现(表示图像已加载)。然后让它执行进一步的命令集。

运行脚本后,我可以进入交互模式,加载我的图像。问题是在远程机器上退出交互模式并将控制权交还给它。

我得到的错误:
expect: spawn id exp4 not open  
while executing
"expect -nobrace Prompt2 {send "dir\r" }"
invoked from within
"expect {
Prompt2 {send "dir\r" }
}"

我怎样才能做到这一点?

最佳答案

你的问题有两方面...

  • 你应该与一个明确的 return 交互,并让它知道你已经释放了控制......在这种情况下,我使用三个加号并按回车键。
  • 返回控制权后,脚本将需要再次获得提示,这意味着返回控制权后您要做的第一件事就是发送另一个 \r 。我编辑了我认为您正在尝试做的事情...

  • 示例如下...
    #!/bin/bash  
    set timeout -1

    expect -c "

    spawn telnet $IP $PORT1
    sleep 1
    send \"\r\"
    send \"\r\"
    expect Prompt1>
    interact +++ return

    send \"\r\"
    expect {
    Prompt2> {send \"dir\r\" }
    }
    "

    关于expect - 我怎么知道我已经完成了交互模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602327/

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