猫卡在串口接收?

Cat gets stuck on serial receive?

所以我试图向嵌入式设备发送串行命令并获得对我们的测试自动化的响应,我尝试使用 cat 作为以下代码,但卡在 cat 命令上,dd 也是如此,并且我也尝试了this link中发布的解决方案,但无济于事。我想发送命令,接收回复,并在回复非阻塞的情况下做一些事情。也许 Bash 在 C 中有类似于 Select() 的东西?或者,如果有人有更优雅的解决方案,我将不胜感激 :)

#!/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

我找到的最简单的解决方案是只使用 timeout XX cat,这非常适合我的应用程序