我在/ dev中有tty设备,我发送AT命令。我希望逐行阅读并在超时后停止读取文件。
答案 0 :(得分:3)
您可以使用程序stty
配置tty设备。要查看终端/ dev / ttyS0的设置,请尝试
stty -a -F /dev/ttyS0
有关超时的默认设置为min = 1; time = 0
,这意味着读取程序将读取,直到至少读取了一个字符且没有超时。使用例如
stty -F /dev/ttyS0 min 0 time 10
阅读程序(例如cat
)将在一秒钟后读完是否已读取任何内容。参数time
的单位是十分之一秒;您可以查看man stty
以获取更多信息。
答案 1 :(得分:0)
从here编译一些信息,您可以使用以下脚本:
#!/bin/bash
#SPECIFYING THE SERIAL PORT
SERIAL=ttyS0
#SETTING UP AN ERROR FLAG
FLAG="GO"
#OPENING SERIAL PORT FOR READING
exec 99</dev/${SERIAL}
#READING FROM SERIAL
while ["${FLAG}" == "GO" ]
do
#IF NO INPUT IS READ AFTER 5 SECONDS, AN ERROR FLAG IS RAISED
read -t 5 INPUT <&99
STATUS=$?
if test $STATUS -ne 0;
then
FLAG="ERROR"
fi
done
#CLOSING SERIAL PORT
exec 99>&-
当FLAG == GO时,脚本将一次从串行端口读取一行。 STATUS变量获取READ命令的返回。根据{{3}},如果达到指定的超时,则READ将返回不同于0的任何值;否则,返回0。发生这种情况时,将更新FLAG,退出读取循环。