Linux

Bash 需要向另一個 CLI 發送命令

  • May 13, 2019

我想自動化一些命令,事情是我們登錄到伺服器,下一個命令行不是 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 環境中回顯,而沒有碰到 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

因此,此處提供的答案並通過預期問題為我解決了這個問題。我有一件奇怪的小事,bash 沒想到,這也是這個答案中的解決方法。我還有另一個問題是無法在非 Bash 環境中增加變數。但現在我可以將它作為 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) 的變數的建議,那就太好了。

如上所述,期望可以執行您正在嘗試的此呼叫。基於此其他應用程序 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
") 

引用自:https://unix.stackexchange.com/questions/518209