【问题标题】:How to wait for a command in a scripted telnet session?如何在脚本化的 telnet 会话中等待命令?
【发布时间】:2013-06-17 14:08:18
【问题描述】:

通过 telnet 自动发送文件可以正常工作。但是我如何让 telnet “等待”我以这种方式启动的进程,在这种情况下,nc 接收文件?这里的机器人在192.168.0.45,我的笔记本电脑在192.168.0.10

{
sleep 1
echo "root"
echo "cd /flash"
echo "nc 192.168.0.10 10001 >lasertest"
sleep 5
} | telnet 192.168.0.45 23

有几个像这样的问题 [1],但似乎没有一个希望有这种同步行为。在上面的过程中等待 5 秒,只是假设这对于传输来说已经足够了。如果不够长,这样传输的文件只会被截断而损坏。

[1]Telnet inside a shell script

【问题讨论】:

    标签: sleep wait telnet netcat


    【解决方案1】:

    expect 脚本应该可以。

    #!/usr/bin/expect -f
    spawn telnet 192.168.0.45 23
    expect login
    send "root\n"
    send "cd /flash\n"
    send "nc 192.168.0.10 10001 >lasertest\n"
    send "exit\n"
    expect eof
    

    如果登录提示不包含“login”,则适当更改“expect”命令。

    【讨论】:

    • 那么,expect 是必要的吗? send 怎么知道一个命令已经完成?
    • expect 是一款可以满足您的需求的工具 - 不一定是唯一一款。 - send 不知道命令已经完成,也不需要知道。整个过程运行到最后就足够了,expect eof 负责处理。
    • 如果您绝对想等待单个命令完成,您可以将expect 与提示字符串的[部分] 穿插。
    • 是的,这可行,您介意编辑您的答案,以便我接受。这么说它不会等待nc 完成。
    • 确实,expect eof 的效果非常好。 nc 将传输所有内容,expect 将巧妙地等待 EOF 信号,这只会在 nc 完成后发生。小改:logout并非所有机器都存在,替换为exit
    猜你喜欢
    • 2016-12-19
    • 2015-09-29
    • 2017-08-29
    • 2012-12-07
    • 2019-11-06
    • 2012-11-10
    • 2013-03-27
    • 2010-10-17
    • 2017-07-09
    相关资源
    最近更新 更多