shell - Ubuntu Server 21.10 - 插入 USB 设备时如何运行 Shell 脚本

标签 shell ubuntu usb udev

我想在插入 USB 设备时运行特定的脚本。但是,当我使用 USB 设备时,什么也没有发生。
这是我要运行的脚本(/home/update.sh):

#!/bin/sh
netplan apply
在同一目录中,我通过运行使其可执行:
sudo chmod +x update.sh
我通过在 /etc/udev/rules.d/70-snap.snapd.rules 之后添加以下行来更新 udev 规则文件 ( LABEL="mm_mbm_check" ) :
ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"
据我了解,我使用 * 来允许任何 USB 设备。
更新此 udev 规则文件后,我运行以下脚本来应用规则:
sudo service udev restart
以下是运行 restart udev 命令 ( tail -f /var/log/syslog ) 后来自 syslog 的日志:
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:14 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if cmp -s $ALIASES/uart0 $ALIASES/serial0; then echo 0;elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then echo 1; else exit 1; fi'" for PROGRAM (char 58: invalid substitution type), ignoring, but please fix it.
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:27 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if [ -e /dev/ttyAMA0 ]; then exit 1; elif cmp -s $ALIASES/uart0 $ALIASES/serial0; then echo 0;elif cmp -s $ALIASES/uart0 $ALIASES/serial1; then echo 1; else exit 1; fi'" for PROGRAM (char 97: invalid substitution type), ignoring, but please fix it.
Nov  8 19:52:20 ubuntu systemd-udevd[23328]: /usr/lib/udev/rules.d/90-pi-bluetooth.rules:38 Invalid value "/bin/sh -c 'ALIASES=/proc/device-tree/aliases; if cmp -s $ALIASES/uart1 $ALIASES/serial0; then echo 0; elif cmp -s $ALIASES/uart1 $ALIASES/serial1; then echo 1; else exit 1; fi '" for PROGRAM (char 58: invalid substitution type), ignoring, but please fix it.
最后,当我将 USB 设备插入 Raspberry 时,没有任何 react 。
我的配置:
  • 树莓派 3
  • Ubuntu 服务器 21.10

  • 谢谢你的帮助 !

    最佳答案

    一切都正确,除了文件 /etc/udev/rules.d/70-snap.snapd.rules 中添加的规则.
    为了使它工作,我添加了一个新文件 90-usb.rules/etc/udev/rules.d/目录包括以下规则:

    ACTION=="add", ATTRS{idVendor}=="****", ATTRS{idProduct}=="****", RUN+="/home/update.sh"
    
    代替
    ACTION=="add", ATTRS{idVendor}=="`****`", ATTRS{idProduct}=="`****`", RUN+="/home/update.sh"
    
    我使用以下脚本重新启动了 udev:
    sudo service udev restart
    
    现在,当我插入任何 USB 设备时,我的脚本正在运行。

    关于shell - Ubuntu Server 21.10 - 插入 USB 设备时如何运行 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69889385/

    相关文章:

    linux - 在使用 'make' 命令后播放声音

    arrays - 如何在 Bash 中按降序对字符串数组进行排序?

    linux - 从本地文件上传数据到 hdfs 时出错

    linux - Ubuntu 18 上的 nginx 网站未在公共(public) IP 上加载

    android - 我可以 "safely remove"来自 Android OTG 的 USB 设备,在向它写入文件后?

    c# - ControlTransfer 指令未从 LibUsbDotNet 中的设置打包器发送值参数

    android - 通过 USB 将文本文件从安卓设备传输到电脑

    shell - tee 到压缩文件

    linux - 从 shell 脚本调用脚本 - 找不到获取命令

    linux - 获取之前的 nginx 配置文件