Итак, я пытаюсь отправить последовательную команду на встроенное устройство и получить ответ для нашей автоматизации тестирования, я попытался использовать 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
'cat' будет читаться из пока вход не покажет конец файла. Если это указание никогда не генерируется, оно будет долго сидеть там, ожидая дополнительного ввода. Таким образом, в основном, он работает как разработанный. Если вы хотите прочитать ограниченный объем данных, то, возможно, 'dd' будет лучше, чем' cat' ... – twalberg
Большое спасибо Я прихожу к этой реализации, но 'dd' не полезен в моем приложении, поскольку Я не знаю, сколько байтов я читаю, возможно, я получаю некоторые сообщения журнала –