创建一个bash脚本,将“ watch lsusb”的输出记录到一个空文件中

问题描述

我在带有板载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甚至是{{ 1}}输出。

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

任何建议或见解都会有所帮助,谢谢。

解决方法

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

while true; do
    lsusb >> lsusb_logs
    sleep 1 # 1 second delay
done
,

您可以采取另一种方法,而不是无限期地遍历同一重复命令。

您可以利用udev监视pluggedunplugged USB设备,并在那时执行脚本。

示例,创建2个脚本:

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

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

并使这些可执行文件:

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",RUN+="/bin/device_removed.sh"

这样,您的2个脚本仅在更改时记录,而不是始终记录。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...