【发布时间】:2014-10-23 15:33:18
【问题描述】:
我正在尝试移植一个脚本来处理来自 matlab 的“写入串行端口”。 我在端口 /dev/ttyUSB0 上有一个串行设备,我需要向其写入 '\xFE\x6C\x01' 以打开继电器。 我用过
echo -en '\xFE\x6C\x01' > /dev/ttyUSB0
在终端上。它工作正常,继电器已打开。 现在,如果我在 bash 脚本文件中使用它,
#!/bin/bash
echo -en '\xFE\x6C\x01' > /dev/ttyUSB0
然后运行文件,什么也没有发生。为什么会这样?
这是我第一个认真的 bash 脚本。感谢您的帮助
【问题讨论】:
-
什么都没有发生?运行
bash -x script.sh会显示回声吗?您是否以可以写入该设备的用户身份运行脚本? -
这是整个 bash 脚本文件吗?
-
好吧,我现在看起来像个白痴。我使用
sh script.sh运行脚本。和sh -x script.sh(后者显示回声发生,但串行继电器仍然没有打开。)如果我运行bash -x script.sh继电器打开。有什么不同? (非常感谢)为了清楚起见,我从我的 bash 脚本中删除了所有其他内容 -
sh的内置echo不支持-e选项。也许这解释了为什么当使用sh执行脚本时你没有得到你想要的东西。对于sh,您可以使用externalecho命令和/bin/echo。 -
@chinn
sh最常见的是dash,而不是bash。而且,正如上面的评论所指出的,bash中的echo是内置的,因此结果不一定是可移植的。这就是使用printf is preferred if you're trying to do anything more fancy than just printing a basic string 的原因之一。 (printf也是 bash 内置的,但除了在各种扩展情况下更便携)
标签: bash shell serial-port