我有一个非常简单的bash脚本,它将命令发送到serial并读回你的值。问题是,当我没有收到价值时,它可能会卡住。
echo BC > /dev/ttyS1
read line < /dev/ttyS1
echo $line
我已经使用cat命令超时,但是不能使用&#39; read&#39;,因为如果我将进程发送到后台,我退出时永远不会获得值。 &#39;猫&#39;大部分都有用,但我不确定这是否是最强大的方法。
echo BC > /dev/ttyS1
cat /dev/ttyS1 &
pid=$!
sleep 0.1
kill -9 $pid
答案 0 :(得分:3)
来自Bash参考手册的4.2 Bash Builtin Commands部分:
读[-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
...
-t timeout
如果在超时秒内未读取完整的输入行,则会导致读取超时并返回失败。超时可以是十进制数,小数点后面的小数部分。此选项仅在读取来自终端,管道或其他特殊文件的输入时有效;从常规文件中读取时没有任何效果。如果timeout为0,如果输入在指定的文件描述符上可用,则read返回成功,否则失败。如果超出超时,则退出状态大于128.