Bash 需要向另一个 CLI 发送命令

Bash 需要向另一个 CLI 发送命令

我想自动化一些命令,我​​们登录到服务器,下一个命令行不是Linux命令行,而是应用程序本身的命令行。我目前的解决方案尝试如下。

#!/bin/bash
# smsme.sh

i=0
i=$((i+1))


rancli
         sleep 3
echo `add saf dest=4949 orig=Wim text=$i`
sleep 120;

# ---

快速提示它在添加时中断。我也尝试通过管道传输命令,它只是在 linux enverimont 中回显,而没有点击 rancli

更新后更新脚本

#!/bin/bash
# smsme.sh

i=0
i=$((i+1))

rancli

read $reply

回答脚本

#!/usr/bin/env expect

set timeout -1

spawn ./smsme.sh


expect {
    "Quortus Core CLI (c) 2019
    No entry for terminal type "xterm-256color";
    using dumb terminal settings.
    Connecting to RAN at 127.0.0.1:3012QCore>
    LTE64b>"

    }
    eof
}




send -- add saf dest=4949 orig=Wim text=wim

expect "Submitted, message number $1"

expect eof

答案1

如上所述,expect 可以执行您正在尝试的此调用。基于此其他应用程序 cli 接口响应,您可以与其交互。

VAR=$(expect -c "
  spawn rancli add saf dest=4949 org=Wim text=$i 
  expect \"place_what_expect_to_receive_from_that_appcli\"
  send \"whatever_you_want_to_send_initially\r\"
  expect \"\\\\example_system_cursor \"
  #you can sleep if needed
  sleep 2
") 

答案2

因此,这里提供的答案并通过预期问题为我解决了这个问题。我遇到了一件 bash 不知道的奇怪的小事情,在这个答案中也解决了这个问题。我还有另一个问题,即无法在非 Bash envirmont 中增加变量。但现在我可以将其作为 cronjob 运行

#!/usr/bin/env expect

set timeout 20

set cmd "rancli"

eval spawn $cmd
expect "Connecting to RAN at 127.0.0.1:3012QCore>"
sleep 2
send "add saf dest=8345 orig=politie text=panda\r"
expect "Submitted,"
send "exit\r"

如果有人有关于如何将 panda\r" 更改为递增 (+1) 的变量的建议,那就太好了。

相关内容