Linux
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 環境中回顯,而沒有碰到 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 ")