Udev、脚本和权限

Udev、脚本和权限

发现很多其他帖子也有“类似”问题,但没有一个真正接近我所遇到的问题。

树莓派 Raspian。

我的 Udev 规则:

SUBSYSTEM=="block", ACTION=="add", RUN+="/bin/bash usr/bin/cardin.sh"

cardin.sh 依次调用另一个脚本(因为这个脚本可能需要很长时间才能运行 - 因此不能由 udev 直接调用)。我将其输出到 tty1 上以显示在 Pi 屏幕上。

#!/bin/bash
echo "SD CARD DETECTED">/dev/tty1
(/bin/bash /usr/bin/empty-card.sh >/dev/tty1) &

然后,第二个脚本执行一些操作(出于专业保密原因,这里未显示某些操作),包括解析 txt 文件、查找以 UTC 时间写入的日期字符串并以当地时间显示它们。

#!/bin/bash
SD_LOC="/media/sd_card"
CARD_FOLDER="$SD_LOC/st"
DEV="/dev/sda1"
if [ -b $DEV ]; then
shopt -s nullglob   ##to avoid wildcard list being non empty
mount $DEV $SD_LOC
echo "SD-Card Mounted WAIT WAIT WAIT WAIT WAIT WAIT"
DIR_CONTENTS=$(ls -A "$CARD_FOLDER")
if [ -z "$DIR_CONTENTS" ] ; then 
    echo "This is an Empty Card"
else
    echo -e  "List of Folders Found:"
    for FOLDER in "$CARD_FOLDER"/* ; do
        NAME="$(basename "$FOLDER")"
        LOG="$FOLDER/log.txt"
        if [ -r $LOG ] ; then
            START=$(grep "Recording started," "$LOG" | grep -oE '[0-9]{2}-[a-Z]{3}-[0-9]{4}[[:space:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9]')
            STOP=$(grep "Recording stopped," "$LOG" | grep -oE '[0-9]{2}-[a-Z]{3}-[0-9]{4}[[:space:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9]')
            echo  -e "$NAME  --- Started $(date -d "$START UTC")  --- Finished $(date -d "$STOP UTC")"
        else 
            echo "$NAME   ---  No Log File in there"
        fi
    done
    echo -e "\nSD-Card Copying:"
    for FOLDER in "$CARD_FOLDER"/* ; do
        ##[lots of other stuff not relevant to the quesiton]
    done
    echo "SD-Card All - SD Card emptied"
fi
umount $SD_LOC
echo "SD-Card Ummounted - OK TO REMOVE OK TO REMOVE OK TO REMOVE OK TO REMOVE OK TO REMOVE OK TO REMOVE"
else
    echo "SD-Card No SD Card"
fi

这两个脚本均由 root 拥有。

我的问题是,如果我手动调用第一个脚本或第二个脚本,它会产生预期的结果。我不需要 sudo 调用;如果我这样做,它无论如何都会起作用。但是当由 Udev 触发时,即插入卡时,脚本会执行所有操作(包括未显示部分中的一些 cp / mv 命令),但它不会显示日志文件中的正确日期,而是显示今天的日期 10:00。

当前调试状态:正则表达式中的空格是罪魁祸首之一。我现在使用的是 [[:space:]]。两个连字符是另外两个罪魁祸首 - 试图转义它们但没有成功。我试过 -、\- 甚至“-”和“\-”还有其他线索吗?

相关内容