我想自动化一些命令,我们登录到服务器,下一个命令行不是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) 的变量的建议,那就太好了。