【问题标题】:Grep not working in script but on consoleGrep 不在脚本中工作,但在控制台上工作
【发布时间】:2015-04-09 12:30:01
【问题描述】:

我的脚本有问题。我有一个连接到串行 USB 设备(ttyUSB1)的电压表。 智能电表需要一个初始序列,紧接着是第二个命令以提供所有信息。这很好用。 1.8.0*00(000898.46) 例如,这是我感兴趣的行。括号中的数字是我想要的千瓦时数。如果我打开第二个终端并执行 cat /dev/ttyUSB1 它工作正常,我可以看到输入的信息。4 到 5 秒后,我想要的行进来了。但脚本不起作用。如果我在一个终端中启动一个脚本,它会一直等待。 Grep 没有完成。如果我在第二个终端启动它,那么第一个终端就完成了。或者只是另一个终端中的 grep 1.8.0 /dev/ttyUSB1 -m1 有效,但在脚本中无效。 我尝试了不同的 read 方法,但没有一个奏效。老实说,我不太了解脚本,并且总是以某种方式成功,但在这里没有任何帮助:(

请帮忙。谢谢! 阿恩

这里是脚本:

#! /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    

【问题讨论】:

    标签: linux terminal grep console


    【解决方案1】:

    您可以尝试使用电压表的输出创建一个文件,然后从该文件中 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
    

    【讨论】:

    • 感谢您的回答,它会创建 /tmp/testfile 但它是空的。如果我用 cat /dev/USBtty1 打开第二个终端,它表明数据正在进入,我认为脚本不知何故无法控制来自 ttyUSB1 的传入数据。也许我必须制作 2 个脚本,一个让仪表发送数据,另一个尝试获取我的号码。实际上,我只想要一个可以将数据返回给我的设备。想知道为什么它不起作用:(
    • 是 /dev/USBtty1 还是 /dev/ttyUSB1?
    • /dev/ttyUSB1 抱歉,不是相反
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2017-05-23
    • 2017-04-10
    • 2013-08-27
    相关资源
    最近更新 更多