我正在使用不支持 bash 的配对嵌入式 Linux 安装,仅支持 sh 跨 ssh 终端。我需要将十六进制数据发送到连接的 USB 设备/dev/ttyUSB0
。我可以使用 bash(在 Ubuntu 18.04 的桌面安装上)很容易地做到这一点echo -en '\x01\x02\x03' > /dev/ttyUSB0
,但似乎 sh 不支持反斜杠转义。是否有另一种相对简单(甚至不那么简单)的方法来使用 sh 来做到这一点?
不幸的是,$SHELL --version
没有返回任何东西。内核版本为 4.1.0。
这是printf 优于 echo的原因之一。的实现
echo
在是否以及如何支持选项和反斜杠转义方面有所不同,但所有版本的printf
都应该支持反斜杠转义。唯一的问题是,只有八进制转义符
\001
是标准的,所以\x01
即使使用printf
. 你可以从尝试开始printf "\x01"
。如果这不起作用,您将不得不切换到八进制。使用任何程序员的计算器进行离线转换,或者使用类似
printf "%o\n" "0x61"
转换的东西或使用类似这样的东西来批量转换您的字符串:(它应该给
foo\001\141
)您正在混合 slash
/
和 backslash\
。转义是用反斜杠完成的:
最后,我使用我的 Ubuntu 桌面创建了二进制文件。
然后,将二进制文件复制到运行 ash shell 的系统后,我将脚本中的那个文件放到 USB 中。
如果有更好的方法来做到这一点,那就太好了,无需创建一组二进制文件的中间步骤,但这现在可以工作。