서버에 로그인하는 일부 명령을 자동화하고 싶습니다. 다음 명령줄은 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) 증가하는 변수로 변경하는 방법에 대한 제안이 있는 사람이 있다면 좋을 것입니다.