【问题标题】:Creating a bash script that logs the output of 'watch lsusb' into an empty file创建一个 bash 脚本,将“watch lsusb”的输出记录到一个空文件中
【发布时间】:2021-01-12 05:03:03
【问题描述】:

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

我做了一个简单的 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 集线器状态的外围设备的历史数据。

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

【问题讨论】:

    标签: linux bash shell watch lsusb


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      您可以利用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", ENV{DEVTYPE}=="usb_device", RUN+="/bin/device_removed.sh"
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多