LINUX.ORG.RU

echo пишет на модем бред

 , ,


0

1

Простейший скрипт

#!/bin/bash
while (true) ; do echo -e "AT+CSQ\r\n" > /dev/ttyUSB2; sleep 1; done &
cat /dev/ttyUSB2
первый раз посылает команду нормально. А потом начинает городить бред. То AT+C посылает, то AT+, то ATA, и даже не по одному разу, а и с сотню кряду иногда. Если просто запустить cat на одном терминале и посылать команды руками с другого — та же фигня. С неделю назад, до того как юзера добавил в нужную группу, тестил под рутом — вроде всё работало нормально. Сейчас и под рутом то же самое. В чём причина? Подключение как было, так и есть через wvdial. Есть вместо echo что-нибудь более низкоуровневое, делающее за раз один вызов write?

и даже не по одному разу, а и с сотню кряду иногда.

А зачем ты тогда завернул это в цикл с условием true?

kostik87 ★★★★★ ()
Ответ на: комментарий от Black_Shadow

А прямо из командной строки скрипты принимать может? Не хочу ради двух команд лишние файлы городить.

MiniRoboDancer ★☆ ()

1) stty raw -echo < /dev/ttyUSB2
2) printf 'AT+CSQ\r', все '\n' там лишние.
3) 'chat' работает аккуратнее, или по AT^CURC=1 включить непрерывную выдачу статистики и отлавливать '^RSSI:'.

ABW ★★★★★ ()
Ответ на: комментарий от ABW

printf работает стабильно, спасибо. В целом, рабочего решения добиться удалось, однако есть проблема с выводом.

#!/bin/bash
timeout 1 cat /dev/ttyUSB2|grep ':'|colrm 1 5|\
awk -F, '
{ORS=""}
{print "𝍖"}
{if ($1 > 3) {print "𝍔"} else {print "𝍖"}}
{if ($1 > 9) {print "𝍎"} else {print "𝍖"}}
{if ($1 > 14) {print "𝌼"} else {print "𝍖"}}
{if ($1 > 19) {print "𝌆"} else {print "𝍖"}}
' &
printf "AT+CSQ\r" > /dev/ttyUSB2
wait
exit 0
Обычно выдаёт выхлоп после завершения работы скрипта, изредка не выдаёт вообще. В связи с этим нормально использовать скрипт на панели нельзя. Как обеспечить стабильный посыл->вывод->завершение?

MiniRoboDancer ★☆ ()
Ответ на: комментарий от MiniRoboDancer

изредка не выдаёт вообще

что в твоём примере возможно, только если awk получает пустой файл.
1) Добавь перед первым '{print...' шаблон 'BEGIN'.
2) 'grep :' может наловить лишнего, сделай таки 'CSQ:', хотя если уж используешь awk, то grep... | colrm... совершенно ни к чему.
3) подумай всё-таки об использовании чего-либо подобного

/usr/sbin/chat -s -S -t 1 2>&1 <>/dev/ttyUSB2 >&0 \
REPORT +CSQ: ABORT ERROR ABORT 'NO CARRIER' \
'' AT+CSQ OK

ABW ★★★★★ ()

1) echo -ne, а не просто -e

2) Надо настроить tty. Как ни странно, screen вам его правильно настроит. Затем можно посмотреть эти настройки через stty и задать их еще раз, если нужно будет после перезагрузки, например.

ValdikSS ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.