如何使用sh脚本将十六进制数据发送到/dev/ttyUSB0?

如何使用sh脚本将十六进制数据发送到/dev/ttyUSB0?

我正在使用配对的嵌入式 Linux 安装,该安装不支持 bash,仅支持 ssh 终端上的 sh。我需要将十六进制数据发送到连接的 USB 设备/dev/ttyUSB0。我可以使用 bash (在 Ubuntu 18.04 的桌面安装上)轻松地完成此操作echo -en '\x01\x02\x03' > /dev/ttyUSB0,但 sh 似乎不支持反斜杠转义。是否有另一种相对简单(甚至不那么容易)的方法来使用 sh 做到这一点?

不幸的是,$SHELL --version没有返回任何东西。内核版本是4.1.0。

答案1

这是原因之一为什么 printf 比 echo 更好。的实现echo在是否以及如何支持选项和反斜杠转义方面有所不同,但所有版本printf都应支持反斜杠转义。

唯一的问题是只有八进制转义符,就像\001标准的一样,所以\x01即使使用printf.不过你可以先尝试一下printf "\x01"

如果这不起作用,您将不得不切换到八进制。要么使用任何程序员的计算器离线进行转换,要么使用类似于printf "%o\n" "0x61"转换的东西或使用类似的东西来批量转换您的字符串:

echo 'foo\x01\x61' | perl -pe 's/\\x([0-9a-fA-F]{2})/sprintf("\\%03o", hex($1))/ge'

(它应该给foo\001\141

答案2

您正在混合斜杠/和反斜杠\

转义是通过反斜杠完成的:

echo -en '\x01\x02\x03' > /dev/ttyUSB0

答案3

最后,我使用我的 Ubuntu 桌面来创建二进制文件。

echo -en '\x01\x02\x03' > binary.file

然后,将二进制文件复制到运行 ash shell 的系统后,我将脚本中的该文件复制到 USB。

cat binary.file > /dev/ttyUSB0

如果有更好的方法来做到这一点,而不需要创建一组二进制文件的中间步骤,那就太好了,但这目前是可行的。

相关内容