LINUX.ORG.RU

Shell. Работа со строками. /dev/ttyS1


0

1

Помогите советом. Устройство /dev/ttyS1 каждую секунду выдает в поток строки данных. Как shell-командой заполучить всего одну свеженькую строку из этого потока и записать в переменную.

Это ты все про свой GPS что ли?

А чего в той же теме вопрос не задал?

// и вообще, осиль уже С!!!

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

Да про GPS. Кстати, так я пробовал. Не получается. Даже если просто ввести в терминале:

# tail -n 1 /dev/ttyS1

Процесс повисает и выход только по ctrl+C.

podovalov5
() автор топика
Ответ на: комментарий от Eddy_Em

Мне потом с этой строкой нужно будет поработать, извлечь из нее данные и отправить способом, который обсуждался вот в этой теме https://www.linux.org.ru/forum/development/10833009?lastmod=1410259473852#comment-10833761 (комментарий). Задача-то, в принципе не очень сложная, поэтому я и решил скриптом. Да и для понимания проще.

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

Можно что-нибудь наподобие этого сделать:

while read L; do
  # обрабатываем L - считанную строку данных
  # и выполняем прочие действия
done < /dev/ttyS1

Если надо по таймеру считывать, можно попробовать так:

function read_and_process_line()
  read tmp < $1
  read L < $1
  # всякие команды по обработке и т.п.
}
и вызывать: read_and_process_line /dev/ttyS1 (tmp нужно на всякий случай — вдруг обрубок строки считан будет).

Или можно бесконечно считывать все, но обрабатывать только по таймауту.

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

Не работает.

# var1=$(cat /dev/ttyS1); var2=$(echo $var1 | tail -n 1); echo $var2
^C 
...и выход только по CTRL+C.

podovalov5
() автор топика
Ответ на: комментарий от nanoolinux

Он ждёт конец файла, а не конец строки.

Файл-то никогда не кончится. Так значит нет такой команды, чтобы извлечь из /dev/ttyS1 только одну строку???

podovalov5
() автор топика
Ответ на: комментарий от Elyas

Спасибо всем за помощь. В результате решил пользоваться вот таким конвейером:

cat /dev/ttyS1 | head -n 20 | grep GPRMC | head -n 1 
Не слишком ли толсто?

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

Это значит, что read будет читать не со стандартного входа, а из файла

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