0

我在带有板载 USB 集线器(特别是 BeagleBone Black)的微处理器上有一个嵌入式 Linux 系统(运行 Ubuntu 10)。

我做了一个简单的 bash 脚本,它应该运行一个命令,watch lsusb; 并且当它运行时,我的程序需要将我的命令生成的输出转储到文本或 JSON 文件中(理想情况下在 USB 记忆棒上,usb0为了示例而调用)。

到目前为止,这就是我所拥有的:

#!/bin/bash
#DATE=$(date +'%F %H:%M:%S')
DIR=/home/ubuntu/lsusb_logs
CMD='watch lsusb'
$CMD > $DIR

这会一直运行到我停止它,这很好。但是当我查看我现在创建lsusb_logs的文件时,所有数据似乎都已编码或需要格式化,因为它根本不像单个lsusb甚至watch lsusb输出的原始格式。

此脚本的目的是在环境室(气候压力测试)中收集 24 小时内有关 USB 集线器状态的外围设备的历史数据。

任何建议或见解都是有帮助的,谢谢。

4

2 回答 2

3

watch将打印一些不可读的字符,因为它需要在每次运行命令时清除屏幕。但是,您可以在无限 while 循环中运行该命令,但会有一些延迟:

while true; do
    lsusb >> lsusb_logs
    sleep 1 # 1 second delay
done
于 2020-09-25T21:06:55.203 回答
1

您可以采取另一种方法,而不是无限期地循环执行相同的重复命令。

您可以利用udev监控pluggedunpluggedUSB 设备,并在那时执行脚本。

例如,创建 2 个脚本:

vi /bin/device_added.sh
vi /bin/device_removed.sh

它将记录到日志文件中的操作(添加或删除),

并使这些可执行文件:

chmod +x /bin/device_added.sh
chmod +x /bin/device_removed.sh

然后创建一个 udev 规则,该规则将包含检测到设备更改时的触发器:

vi /etc/udev/rules.d/80-test.rules

其中将包含例如:

SUBSYSTEM=="usb", ACTION=="add", ENV{DEVTYPE}=="usb_device",  RUN+="/bin/device_added.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"

这样,您的 2 个脚本仅在更改时记录,而不是一直记录..

于 2020-09-25T22:23:14.363 回答