我正在制作一个简单的Shell脚本,以将数据写入和读取到串行设备.
我在终端上使用这些命令,并且它们正确响应:
写我正在使用:
echo -en '\xAA\x04\xC2' > /dev/ttyUSB0
要阅读我正在使用阅读:
cat -v < /dev/ttyUSB0
但是当我将其包含在shell脚本中时,它没有响应.我需要有关此的帮助.
我也想知道,当我发送写命令时,它应该以十六进制格式给我输出,但是它以这种格式给我输出M-* ^ NM- ^ H
在这方面也需要帮助.
解决方法:
我希望您的cat语句阻止等待文件结束.它将您的输入tty视为标准的终端设备,在这种情况下,它将需要文件结尾字符来终止输入(例如,Control-D),并且可以对输入和输出进行其他处理.您最好熟悉stty命令及其选项(请参见stty man page).尝试执行stty -F / dev / ttyUSB0来查看设置了哪些选项.
读取输入的最简单方法可能是一次读取一个字符.您可以尝试以下脚本.从输入直到输入“ q”,这一次将读取一个字符.
stty -F /dev/ttyUSB0 raw
stty -F /dev/ttyUSB0 -echo
while read -rs -n 1 c && [[ $c != 'q' ]]
do
echo "read " # Replace this with code to handle the characters read
done < /dev/ttyUSB0
如果-F不起作用,请将stdin重定向到该设备.
对于您的输出问题,我认为它正在运行,但是您看到的是显示为字符的字符,而不是十六进制代码.要查看十六进制代码(仅用于验证测试-我认为您不希望将十六进制代码发送到终端),请尝试:
echo -en '\xAA\x04\xC2' | od -tx1
您可能还希望在输出时设置原始模式,以避免驱动程序更改输出字符.
标签:shell,linux
来源: https://codeday.me/bug/20191120/2045751.html