Bash:在设备上写入然后从中读取

时间:2015-10-06 11:26:21

标签: bash device read-write

我正在开发一个非常小的程序,其重量传感器连接到S0。以下是我初始化串口的方法:

stty -F /dev/ttyS0 9600 min 60 time 1 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke parenb -ixon

我已经测试了几种写入设备的方式,然后从中读取:

echo IDN? >> /dev/ttyS0
read -t1 output < /dev/ttyS0   # waits for ever here.

我也试过了:

echo IDN? >> /dev/ttyS0 && read -t1 output < /dev/ttyS0  # waits too

但不成功。在一行中,它不会改变任何东西。

until read -t1 < /dev/ttyS0; do
    echo IDN? > /dev/ttyS0
done
identity=$(echo $REPLY | tr -d $'\r')

连接设备时可以使用。

对于我的测试,我做了这个并且它起作用了:

$ cat /dev/ttyS0 &
[1] 9188
$ echo IDN? >> /dev/ttyS0
HBM-xxxyyyzzz$

我尝试的三种方式都没有成功。也许是因为设备的响应速度比bash解释得快?如果是这样的话,我怎么能避免这个从设备上得到一个完美的定时答案?

我实际上正在搜索的是,如果设备在1秒内没有应答,则跳过读取,但如果它在200ms读取,则继续而不等待800最后ms

1 个答案:

答案 0 :(得分:5)

以读/写模式打开设备应该可以正常工作。

exec 3<> /dev/ttyS0
echo "IDN?" >&3
read -t1 output <&3

使用exec这样打开文件意味着文件在多个命令之间保持打开状态,而不是被每个命令打开和关闭。