#!/bin/sh ... 我的朋友,hashbang 在哪里?

#!/bin/sh ... 我的朋友,hashbang 在哪里?

当我插入和拔出交流适配器时,我试图在 udev 的帮助下更改一些设置,但似乎无法让它运行。我正在运行 ubuntu 15.04,这是我得到的:

sudo systemctl status udev
● systemd-udevd.service - udev 内核设备管理器
   已加载:已加载(/lib/systemd/system/systemd-udevd.service;静态;供应商预设:已启用)
   活跃:自 lör 2015-05-02 20:28:42 CEST;2 小时 3 分钟前开始活跃(运行)
     文档:man:systemd-udevd.service(8)
           手册:udev(7)
 主 PID:293(systemd-udevd)
   CGroup:/system.slice/systemd-udevd.service
           └─293 /lib/systemd/systemd-udevd
agni%ls-l /etc/udev/rules.d/50*
-rw-r--r-- 1 root root 122 maj 2 20:25 /etc/udev/rules.d/50-kappa.rules

这是规则所包含的内容,我尝试了几种不同的方法,但这是目前的内容,据我了解,它应该有效

猫/etc/udev/rules.d/50-kappa.rules
动作==“更改”,子系统==“power_supply”,运行+=“/usr/local/bin/power-change.sh true”

以及应该运行的脚本

ls -l /usr/local/bin/power-change.sh
-rwxr-xr-x 1 根根 255 maj 2 17:24 /usr/local/bin/power-change.sh
猫/usr/local/bin/power-change.sh
设置_ac(){
    echo -e "$(date)\nAC CONNECTED" > /home/kempe/test2.txt
}

设置蝙蝠() {
    echo -e "$(date)\nAC DISCONNECTED" > /home/kempe/test2.txt
}

案例 $1
    真)set_ac;;
    假)设置蝙蝠;;
    *)退出1;;
埃萨克

出口 0

这就是我为让它运行而做的尝试,但没有成功

sudo udevadm control --reload #无效
sudo udevadm trigger # 无效果
sudo reboot #无效:)
udevadm 监视器--属性
监视器将打印接收到的事件:
UDEV - udev 在规则处理后发出的事件
KERNEL - 内核 uevent

KERNEL[816.963544] 更改 /设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 (power_supply)
行动=改变
DEVPATH=/设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1
电源名称=ADP1
电源在线=0
序列号=2847
子系统=电源

UDEV [816.966150] 更改 /devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1 (power_supply)
行动=改变
DEVPATH=/设备/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1
电源名称=ADP1
电源在线=0
序列号=2847
子系统=电源
USEC_INITIALIZED=6963257

KERNEL[817.171654] 更改 /devices/virtual/backlight/mba6x_backlight (背光)
行动=改变
DEVPATH=/设备/虚拟/背光/mba6x_backlight
序列号=2848
源=sysfs
子系统=背光

UDEV [817.174385] 更改/devices/virtual/backlight/mba6x_backlight (背光)
行动=改变
DEVPATH=/设备/虚拟/背光/mba6x_backlight
序列号=2848
源=sysfs
子系统=背光
SYSTEMD_WANTS=systemd-backlight@backlight:mba6x_backlight.service
标签=:systemd:
USEC_INITIALIZED=8174

如果我直接从终端运行脚本,它可以正常工作,所以没有问题

/usr/local/bin/power-change.sh true
agni%cat /home/kempe/test2.txt
-e lör 2015 年 5 月 2 日 23:06:52 CEST
交流电连接

有什么建议么?

答案1

#!/bin/sh ... 我的朋友,hashbang 在哪里?

  • 脚本中缺少 hashbang:

    udev 不会在任何活动终端上运行这些程序,也不会在 shell 上下文中执行它们。请确保您的程序已标记为可执行,如果是 shell 脚本,请确保它以一个合适的 shebang (例如 #!/bin/sh),并且不要期望任何标准输出出现在您的终端上。

    来源: 编写 udev 规则

  • 另一种方式,调用它/bin/sh

    ACTION=="change", SUBSYSTEM=="power_supply", RUN+="bin/sh /usr/local/bin/power-change.sh true"
    

我花了大约两个小时错误地寻找规则中发生了什么。这对我来说也是一个教训。

顺便说一句,您可以调试和测试您的 udev 设置。

sudo udevadm test /sys/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0003:00/power_supply/ADP1

相关内容