Bash超时'读'命令

时间:2014-12-16 15:48:24

标签: bash serial-port

我有一个非常简单的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

1 个答案:

答案 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.