【问题标题】:Using 'echo' in a bash script to write to serial port在 bash 脚本中使用“echo”写入串行端口
【发布时间】: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,您可以使用external echo 命令和/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


【解决方案1】:

我认为这是不可能的,因为用一个简单的echo,是不可能设置串口速度的。

【讨论】:

  • 可以分享一下如何设置串口的速度吗?
  • @Kyle Hotchkiss 例如 perl 使用 Device::SerialPort 你可以设置端口速度: my $s = new Device::SerialPort("/dev/ttySXXXX"); $s->波特率(9600); $s->write("你好世界");
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多