попытка поместить динамические входные данные в переменную с помощью метода cat

Я пытаюсь написать сценарий bash, который должен иметь возможность собирать данные из ttyS0 и помещать переменную.

Мне нужно поговорить с устройством на последовательной линии, то есть модулем, способным принимать AT-команды, которые я могу отправить с помощью echo> ttyS0 и захватить соответствующий ответ в переменной. Это можно сделать без сохранения полученного ответа в переменной (например, cat / dev / ttyS0 &), но если я попытаюсь поместить эти данные в переменную (то есть VAR = $ (cat / dev / ttyS0 &), t (в VAR я не могу найти ничего после ответа модуля).

То, что я могу сделать «вручную» через терминалы gnome (я работаю с дистрибутивом Ubuntu), таков:

  1. С терминала GNOME, который я вызываю (A), я запускаю (как root)

    # VAR=$(cat /dev/ttyS0) 

    Эта команда не возвращает корневое приглашение # , потому что, вероятно, cat /dev/ttyS0 работает и ждет ввода.

  2. С другого терминала GNOME, который я вызываю (B), я запускаю

     # echo -en "hello in VAR\r" > /dev/ttyS0 

    hello in VAR строке hello in VAR должен перейти в /dev/ttyS0 и поставить cat в VAR

  3. Тогда из (B):

     # killall cat 

    Из терминала GNOME (A) я вижу, что возвращается приглашение ( # );

  4. Наконец, из терминала GNOME (A):

     # echo "$VAR" 

    и я получаю hello in VAR строке hello in VAR .

Я попытался реализовать это через скрипт bash таким образом:

 #!/bin/bash killall cat BASHTESTS_DIR=/root/Desktop/Tips_tricks_tutorials/bash_scripting cd $BASHTESTS_DIR echo "before VARcat_dev_ttyS0" VAR=$(cat /dev/ttyS0) echo "after VARcat_dev_ttyS0" echo -en "hello in VAR\r" > /dev/ttyS0 sleep 2 killall cat echo "content of VAR: $VAR" exit 0 

но сценарий останавливается после echo "before VARcat_dev_ttyS0" Как я могу реализовать то, что я хочу, или что я могу сделать с двумя терминалами GNOME?

One Solution collect form web for “попытка поместить динамические входные данные в переменную с помощью метода cat”

Похоже, вы пытаетесь использовать ttyS0 как средство для подключения двух процессов. Это не будет работать надежно, поскольку ttyS0 является интерфейсом к последовательной линии ( COM1: в Windows-говорить).

С другой стороны, может быть, что информация отсутствует в вашем вопросе. Если у вас действительно есть устройство на вашем последовательном порту, сделайте это ясно.

То, что я считаю, вы ищете, это труба. В файловой системе это похоже на файл, но позволяет считывать данные, записанные в одну сторону, из другой. Это то, что за кулисами вездесущих | оператора, как, например, id | nl id | nl .

Вы можете создать канал с командой mkfifo или mknod p если вы настаиваете.

Терминал 1

 mkfifo /tmp/pipe # Create the pipe ls -l /tmp/pipe # Notice the first character is 'p' echo hello > /tmp/pipe # Write to it rm -f /tmp/pipe # Remove the pipe 

Терминал 2

 cat /tmp/pipe # Read from the other side of the pipe 

Вы можете расширить код терминала №2 следующим образом. Помните, однако, что для каждого нового чтения (фактически открытого / чтения / закрытия) на трубе вам нужно предоставить свежие данные.

 read VAR </tmp/pipe # Read one line from the pipe VAR=(cat /tmp/pipe) # Read from the pipe until EOF 
  • Как использовать namedpipe как временный файл?
  • использование scp переименование всех файлов
  • Как поймать и обработать ненулевой статус выхода в функции Bash?
  • Реагировать на входящие файлы в каталоге на HP-UX
  • Вставить новую строку со значением, когда значение не найдено вообще
  • Группировать по и сумме в сценарии оболочки без awk
  • Проверьте, содержит ли переменная оболочки абсолютный путь
  • Сценарий оболочки с трубами, не работающими в crontab
  • Как заменить строки-заполнители в документе содержимым из файла
  • Можно ли использовать shebang для самого источника файла в текущей среде bash?
  • Извлечение полей строк в текстовом файле
  • Interesting Posts

    Значение `export PATH = …` в .bash_profile

    Есть ли способ зеркалировать выходы USB?

    grub – перейти на следующий диск

    У меня нет / dev / dsa, но у меня есть звук!

    Поддерживает ли сортировка сортировку файла на месте, например `sed –in-place`?

    Нет подсказки индикатора bash после завершения разветвленного процесса

    Как следить и искать в файле, проходящем через фильтр, менее

    Рекомендуемый способ переупаковки собственных пакетов deb, которые включают старые системные библиотеки

    Обеспечить соответствие требованиям RPM требованиям к зависимости других установленных пакетов

    Можно ли изменить порядок глобуса?

    Содержимое файла удалено

    Вырезано ядро ​​для ноутбука

    Замените все вхождения слова в файлах, содержащихся в папке

    тайм-аут, ничего не получено

    Как заставить Raspberry Pi получать IP-адрес от маршрутизатора, а также передавать другой IP-адрес другому устройству?

    Linux и Unix - лучшая ОС в мире.