2016-07-18 3 views
0

Итак, я пытаюсь отправить последовательную команду на встроенное устройство и получить ответ для нашей автоматизации тестирования, я попытался использовать cat в качестве следующего кода и застрял в команде cat, то же самое касается dd, и я также попытался решение опубликовано в this link безрезультатно. Я хочу отправить команду, получить ответ и сделать что-то с ответом без блокировки. Может быть, у Bash есть что-то похожее на Select() в C? Или если кто-нибудь имеет более элегантное решение, которое я оценил бы его очень :)Кошка застряла на серийном приеме?

#!/bin/bash 
#tty=/dev/tps21 
stty -F /dev/tps21 speed 38400 cs8 cread clocal -cstopb -parenb >> /dev/null 
echo 1 
echo 'loglevel off' > /dev/tps21 
echo 2 
cat </dev/tps21>> /dev/null #Gets stuck here 
echo 3 
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_apn' > /dev/tps21 
echo 4 
echo 5 
apn_raw="$(cat < /dev/tps21)" #Gets Stuck here 
echo 6 
apn="$(echo "$apn_raw" | sed -n 3p)" 
echo 7 
echo "${apn}" 
echo 8 
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_pass' > /dev/tps21 
pass_raw="$(cat -v < /dev/tps21)" #Gets Stuck here 
pass="$(echo "$pass_raw" | sed -n 3p)" 
echo "${pass}" 
nmcli --nocheck d $apn connect $apn password $pass iface wlan0 
+0

'cat' будет читаться из пока вход не покажет конец файла. Если это указание никогда не генерируется, оно будет долго сидеть там, ожидая дополнительного ввода. Таким образом, в основном, он работает как разработанный. Если вы хотите прочитать ограниченный объем данных, то, возможно, 'dd' будет лучше, чем' cat' ... – twalberg

+0

Большое спасибо Я прихожу к этой реализации, но 'dd' не полезен в моем приложении, поскольку Я не знаю, сколько байтов я читаю, возможно, я получаю некоторые сообщения журнала –

ответ

0

Самое простое решение я нашел просто использовать timeout XX cat и что работает отлично для моего приложения

Смежные вопросы