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;

# ---

クイックヒントは追加中に壊れます。私もコマンドをパイプしようとしましたが、rancliを押さずにLinux enverimontでエコーされました。

更新後のスクリプトの更新

#!/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以外の環境で変数を増やすことができないという別の問題があります。しかし、今は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) 増加する変数に変更する方法について提案がある人がいるとよいでしょう。

関連情報