【问题标题】:expect script cutting/trunking lines [closed]期望脚本切割/中继线[关闭]
【发布时间】:2021-02-03 22:28:40
【问题描述】:

我正在运行一个连接到一些 unix 服务器并获取信息列表的脚本,但是我看到收集的信息的某些部分被 spawn 命令截断/截断:

例如:

U2107.D02.RJ02DBH-P1-D20 7 节点 2 RJ02DBH 1 544C01 有源 U2107.D02 U2107.D02.RJ02DBH-P1-D20 1 个节点 1 RJ02DBH 2 558B01 有源 U2107.D02 U2107.D02.RJ02DBH-P1-D20 7 节点 2 RJ02DBH 2 554C02 有源 U2107.D02 生成 sh lscardscript.sh 1 node1 RJ0 无法确定主机'x.x.x.x(x.x.x.x)'的真实性。 ECDSA 密钥指纹为 SHA256:i0CmsCsxkjdsahjdajhdsajhfhxxxxiAg。

在上面的示例中,文本 spawn sh lscardscript.sh 不应该在那里,并且导致一行被截断。然后脚本尝试连接到下一个 IP,有时这些行在下一个 IP 上被截断,有时没有。

这是我的代码:

/usr/bin/expect <<'END_EXPECT'

    set timeout -1
    sleep 1
    send \r
    spawn sh lscardscript.sh
    expect "yes" { send "yes\r"}
    expect {
        -nocase "*assword*" {
            send "$env(PASSWORD)\r"
            exp_continue
        }
        eof
    }

我已经尝试了很多东西,但仍然看到相同的行为,有人知道吗?

【问题讨论】:

  • 您发布的代码在没有任何参数的情况下运行sh lscardscript.sh。没有什么可以截断...

标签: bash shell tcl expect


【解决方案1】:

您的命令send \r(CR = 回车)要求“输出光标”返回到行首。这就是为什么文本“spawn sh lscardscript.sh”会覆盖最后的输出行。

您应该改为发送\n(LF = 换行)或\r\n\n 将导致“输出光标”转到下一行,这将保留已写入的文本。

当然,这个\n一定不能干扰对方期望收到的东西,但我们对此一无所知。

【讨论】:

    【解决方案2】:

    我能够解决问题...我在脚本中添加了以下行。所以它将运行我需要的命令,获取输出并等待 2 秒,然后再调用下一个命令。

    echo "sleep 2" >> lscardscript.sh
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      相关资源
      最近更新 更多