попытка поместить динамические входные данные в переменную с помощью метода 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 
  • Как именно «до $ @» работает в сценариях bash?
  • Запуск команды в новом окне терминала через Python
  • Плагин мониторинга отправителя для Nagios
  • Как объединить два файла в одной строке?
  • Несколько shebangs в одном файле bash
  • Как установить несколько значений в одну и ту же переменную в UNIX?
  • Невозможно выполнить сценарий Bash, если / while
  • Подавлять вывод, если только нулевой код выхода
  • Объединение папок с одним и тем же именем, но с другим корпусом
  • Игнорировать escape-символы при печати строки в сценарии оболочки
  • Объединение цикла вокруг команды sed обрабатывает многие файлы в одном каталоге
  • Interesting Posts

    Как присвоить значение ключу пути в файле .desktop, включая переменную среды $ HOME, правильно?

    Как имена в базе данных dircolors сопоставляются с именами в LS_COLORS?

    Нужно ли вообще беспокоиться о совместимости программного обеспечения, если я использую Mono и Wine?

    Это хорошая идея использовать «безопасный» режим входа zlogin для выключения зоны?

    для + array + args

    Как привести текст HEREDOC в переменную сценария оболочки?

    $ PATH не изменен внутри LXDE на Raspbian

    Запустить предыдущую команду с несколькими заменами

    При использовании UXRVT в цветах колонок Arch Linux работает только для пользователей root, но не для обычных пользователей

    Чтение десятичных знаков в текстовом файле в 1D-массив

    Скрипты многотомных (GNU) `tar` с заранее определенным количеством томов

    шаблон поиска grep в нескольких файлах и вывод в разные файлы

    Найдите путь к kermit-директории, чтобы поставить после shebang (#!) В скрипте

    Использование chown $ USER: $ USER внутри сценария bash

    Запустите простой HTTP-сервер локально на порту, отличном от 80

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