Является ли использование dd для чтения из /dev/ttyUSB0 лучшим вариантом?

У меня возникли проблемы с использованием dd чтобы получить контент от /dev/ttyUSB0, Идея состоит в том, чтобы опрашивать устройство каждые 5 минут (для тестирования). Я, вероятно, буду использовать работу cron позже, но сейчас я проверяю каждую минуту и ​​опрашиваю каждые 5.

Моя проблема возникает на dd линия. Иногда это застревает там. Я пытался с помощью read -r line но это то же самое. Я думаю, что читать нечего. - Как я могу предотвратить dd или же read остановиться, если ничего не исходит /dev/ttyUSB0? - Или / и есть ли лучшая альтернатива для возврата содержимого /dev/ttyUSB0?

Вот мой код, упрощенный:

while [ 1 ]; do
  curdate=`date "+%M"`
  if [[ "$curdate %5" -eq 0 ]]; then

    echo Letspoll
    echo Polldata > /dev/ttyUSB0

    line=`dd if=/dev/ttyUSB0 count=1 2>/dev/null`
    #read -r line < /dev/ttyUSB0

    if [ !"$line" ]; then
      echo $line
    else
      echo Nothing
    fi

  fi

  echo Sleepingfor60sec
  sleep 60
done

Спасибо.

1 ответ

Решение

Обратите внимание, что count параметр для dd указывает количество байтов, а не строк, для чтения. Я предполагаю, что вы хотите линию, в этом случае dd это неправильный инструмент для использования.

# Exit with status 1 if nothing read in 5 seconds
if read -r -t 5 line < /dev/ttyUSB0; then
     echo "$line"
else
     echo Nothing
fi

Кроме того, нет причин использовать date для сна между опросами; просто sleep 300 после каждой попытки read,

Другие вопросы по тегам