linux - Grep 不在脚本中工作,但在控制台上工作

标签 linux terminal grep console

我的脚本有问题。我有一个连接到串行 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/

相关文章:

javascript - NodeJS 在文件名中生成 ffmpeg thumb %t

c - Xcode 和终端中的不同输出

linux - 仅删除包含卡详细信息的行

linux - ls命令杂乱的输出

linux - 获取终端版本的命令行

linux - 如何从远程 linux 服务器发出对 url 的请求?

tcp - dns2tcp 错误 socket.c :107 bind error

regex - 使用egrep检查字符串的长度

linux - 搜索 .txt 文件以获取特定行并输出到新文件

c - 一核专用单进程