【问题标题】:Bash autorun bash script on USB connect fails to get USB infoUSB 连接上的 Bash 自动运行 bash 脚本无法获取 USB 信息
【发布时间】:2018-05-18 07:48:37
【问题描述】:

我编写了一个脚本来获取所有 USB 信息。到目前为止,当我在已连接 USB 的情况下运行脚本时,一切正常。

USB_NAME=$(blkid | grep -oP '(?<=LABEL=").+?(?=")' | tail -1)
USB_DEVICE=$(blkid -o device | tail -1)
USB_TYPE=$(blkid | grep -oP '(?<=TYPE=").+?(?=")' | tail -1)

但是,当我尝试通过插入带有 10.usb-rules 的 USB 来启动自动运行脚本时:

KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/home/user/test.sh"

它运行脚本和所有内容,我看到脚本的输出,但我的USB_NAMEUSB_DEVICEUSB_TYPE 的输出都显示为空白。

它是不是太快地获取信息了?

【问题讨论】:

  • syslog/journalctl 有任何错误吗?可能权限问题。
  • 也许尝试在运行blkid 之前添加 5 秒的睡眠时间,看看是否是时间问题...
  • @MarkSetchell 是的......睡眠不起作用。当我手动运行脚本时它可以工作,所以有些奇怪。
  • @LuisMuñoz 在哪里可以找到 syslog/journalctl?
  • 取决于您的发行版,/var/log/syslog/var/log/messagesjournalcltcommand。

标签: bash usb automount


【解决方案1】:

通过在每个语句前添加 sudo 解决了问题。

USB_NAME=$(sudo blkid | grep -oP '(?<=LABEL=").+?(?=")' | tail -1) 2>&1
USB_DEVICE=$(sudo blkid -o device | tail -1) 2>&1
USB_DEVICE_NAME=$(sudo blkid -o device | cut -d'/' -f3 | tail -1) 2>&1
USB_TYPE=$(sudo blkid | grep -oP '(?<=TYPE=").+?(?=")' | tail -1) 2>&1

【讨论】:

    最近更新 更多