【问题标题】:linux expect in backgroundlinux期望在后台
【发布时间】:2019-07-05 19:51:24
【问题描述】:

我使用以下 bash 脚本通过 telnet 连接到 pbx:

expect.sh:

#!/usr/bin/expect 
    spawn telnet [ip] 2300
    expect -exact "-"
    send "SMDR\r";
    expect "Enter Password:"
    send "PASSWORD\r";
    interact

并创建另一个脚本将结果重定向到文件:

#!/bin/bash
    ./expect.sh | tee pbx.log

我试图在启动时运行 expect.sh,所以我将它添加到 systemd。当我将它添加为/etc/systemd/system 中的服务时,它会运行,但我无法在日志文件中获得结果,就像我手动运行这两个脚本一样 关于如何在启动时运行它的任何想法? TIA

【问题讨论】:

  • Expect 脚本以interact 结尾。这意味着它应该从终端运行,以便您可以开始手动输入命令以发送到远程设备。
  • 如果你从systemd运行,它将无法读取任何输入,所以telnet在发送密码后会立即断开连接,不会有任何输出。跨度>
  • 那么,如何在开机时连接设备?
  • 连接它的目的是什么?
  • 打印 SMDR 到日志文件

标签: bash expect systemd pbx


【解决方案1】:

如果您只想在提供密码后永久输出收到的所有内容,只需将您的interactive 替换为expect eof,即等待另一端关闭连接时将发生的文件结束。您可能还想更改 10 秒的默认超时时间,没有数据会停止命令:

set timeout -1 
expect eof

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2020-06-30
    • 2012-03-14
    • 2015-12-04
    相关资源
    最近更新 更多