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) 증가하는 변수로 변경하는 방법에 대한 제안이 있는 사람이 있다면 좋을 것입니다.

관련 정보