我的脚本有问题。我有一个连接到串行 USB 设备 (ttyUSB1) 的电压表。 智能电表需要一个初始序列,然后紧接着第二个命令来提供所有信息。效果很好。例如 1.8.0*00(000898.46) 这是我感兴趣的行。括号中的数字是我想要的千瓦时数字。如果我打开第二个终端并执行 cat/dev/ttyUSB1 ,它工作正常,我可以看到传入的信息。4 到 5 秒后,我想要的行出现。但脚本不起作用。如果我在一个终端中启动一个脚本,它会一直等待。 Grep 尚未完成。如果我在第二个终端中启动它,那么第一个终端就会完成。或者只是另一个终端中的 grep 1.8.0/dev/ttyUSB1 -m1 有效,但在脚本中无效。 我尝试了不同的阅读方法,但没有任何效果。老实说,我不太了解脚本编写,并且总是以某种方式成功,但这里没有任何帮助:(
请帮忙。谢谢你! 阿恩
这里是脚本:
#! /bin/bash
echo start
echo $'\x2f\x3f\x21\x0d' > /dev/ttyUSB1
sleep 1
echo ask
echo $'\x06\x30\x30\x30\x0d' > /dev/ttyUSB1
echo wait
grep 1.8.0 /dev/ttyUSB1 -m1
echo end
最佳答案
您可以尝试使用电压表的输出创建一个文件,并从该文件中执行 grep 操作:
#! /bin/bash
dev=/dev/ttyUSB1
file=/tmp/testfile
(tail -f $dev | tee $file) & # let's continuously copy in background
echo start
echo $'\x2f\x3f\x21\x0d' > $dev
sleep 1
echo ask
echo $'\x06\x30\x30\x30\x0d' > $dev
echo wait
grep 1.8.0 $file # lets get the info from the file instead
echo end
sleep 1
exit
关于linux - Grep 不在脚本中工作,但在控制台上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415332/