Я хочу иметь возможность отправлять команду "AT + CSQ" в / dev / ttyUSB1 каждые 5 секунд и выходить из системы в ответ на текстовый файл. Я могу сделать это вручную через screen (screen / dev / ttyUSB1 и набрать AT + CSQ и посмотреть ответ), но как мне сделать это как скрипт bash?
Инструмент expect
предназначен именно для такого рода задач. man expect
поможет вам начать.
Ниже приведен пример сценария с некоторой логикой для регистрации и очистки при завершении сценария (команда trap
). Важный трюк заключается в том, чтобы держать вход от последовательного порта открытым, иначе вход с момента закрытия порта может быть потерян.
#!/bin/bash
LOGFILE=/var/tmp/modemlog
MODEM=/dev/ttyUSB1
MODEMCMD=AT+CSQ
INTERVAL=5
LOGDATE="date +%Y%m%dT%H%M%S"
# write command to modem
wrmodem () {
echo -ne "$*"'\r\n' >"$MODEM"
log "--- sent: $*"
}
# log message to a logfile
log () {
echo "$($LOGDATE) $@" >>"$LOGFILE"
}
# logger
{
trap 'log "=== logger stopped $BASHPID"' EXIT
log "=== logger started: $BASHPID"
while true ; do
if read ; then
log "$(tr -d \\r <<<"$REPLY")"
fi
done
} <"$MODEM" &
LOGGERPID=$!
trap 'kill $LOGGERPID' EXIT
# requester
while true ; do
wrmodem "$MODEMCMD"
sleep $INTERVAL
done