我正在尝试每 15 分钟轮询一次通过串行电缆发送数据的设备(Polldata
是设备识别的字符串)。为了测试,我改为每 15 秒轮询一次数据,使用sleep
暂停。CS#1
该设备应发送 3 种不同类型的字符串(以to开头#3
)。
这里是:
#!/bin/bash
#Port settings
stty -F /dev/ttyUSB0 115200
while [ 1 ]; do
curdate=`date "+%M"`
#for testing, I comment that line out:
#if [ $curdate -eq 00 -o $curdate -eq 15 -o $curdate -eq 30 -o $curdate -eq 45 ]; then
echo Polldata > /dev/ttyUSB0
READ=`dd if=/dev/ttyUSB0 count=1 2>/dev/null`
echo $READ
case "$READ" in
*"CS#1"*) echo $READ >> testCS1.txt ;;
*"CS#2"*) echo $READ >> testCS2.txt ;;
*"CS#3"*) echo $READ >> testCS3.txt ;;
esac
#edit: for testing, sleep for 15 sec
sleep 15
pkill -9 sleep
#fi
done
出于某种原因,我的脚本在运行后运行了两次。为什么?我运行它./nameofmyscript.sh
另外,我是 bash 新手,但我读到使用dd
是有风险的。在这种情况下我应该改用什么?设备在轮询后也没有发送任何内容……</p>
在while循环中杀死进程的正确方法是什么?如果我没有在循环结束时杀死它们,我最终会有很多 dd 和 sleep 进程。我dd
也应该在睡后杀人吗?