Bash 代码在终端中执行时可以正确运行,但在使用 udev 执行时无法正常运行

Bash 代码在终端中执行时可以正确运行,但在使用 udev 执行时无法正常运行

我正在尝试将随身碟中存在的各种文件移动到 PC 上各自的文件夹中。即,音乐文件放入音乐文件夹,文本文件放入文档等等。我已经为此编写了一个脚本,当我通过输入 ./cpphone.sh 执行时,它工作正常(所有文件都被移动到各自的文件夹中)但是当我使用 udev 规则时,脚本无法正确执行(没有文件被移动到其文件夹中),但是回显被存储到文件 testlog.txt 中。所以脚本正在执行但文件没有被移动。为什么会这样呢?脚本归 root 所有。

我的 Udev 规则是 ACTION=="add", RUN+="/lib/udev/cpphone.sh"

我的脚本是

    #!/bin/bash
    echo Hello > /home/ArunReddy/testlog.txt
    exec 1>/dev/null 2>&1  
    DIR=$(date +%d-%m-%y) 

    if [ ! -d /home/ArunReddy/Pictures/"$DIR" ];
    then
        cd /home/ArunReddy/Pictures/
    mkdir $DIR
    fi

    if [ ! -d /home/ArunReddy/Pictures/"$DIR" ];
    then
    cd /home/ArunReddy/Documents/
        mkdir $DIR
    fi

    if [ ! -d /home/ArunReddy/Videos/"$DIR" ];
    then
    cd /home/ArunReddy/Videos/
    mkdir $DIR
    fi

    if [ ! -d /home/ArunReddy/Music/"$DIR" ];
    then
    cd /home/ArunReddy/Music/
    mkdir $DIR
    fi

    cd /run/media/ArunReddy/121C-E137
    mv *.png /home/ArunReddy/Pictures/$DIR/
    echo pngfilecmd executed>/home/ArunReddy/testlog.txt
    mv *.jpg /home/ArunReddy/Pictures/$DIR/
    mv *.bmp /home/ArunReddy/Pictures/$DIR/
    mv *.txt /home/ArunReddy/Documents/$DIR/
    mv *.odt /home/ArunReddy/Documents/$DIR/
    mv *.doc /home/ArunReddy/Documents/$DIR/
    mv *.pptx /home/ArunReddy/Documents/$DIR/
    mv *.pdf /home/ArunReddy/Documents/$DIR/
    mv *.ppt /home/ArunReddy/Documents/$DIR/
    mv *.docx /home/ArunReddy/Documents/$DIR/
    mv *.avi /home/ArunReddy/Videos/$DIR/
    mv *.flv /home/ArunReddy/Videos/$DIR/
    mv *.MP4 /home/ArunReddy/Videos/$DIR/
    mv *.mpeg /home/ArunReddy/Videos/$DIR/
    mv *.MP3 /home/ArunReddy/Music/$DIR/
    exit

答案1

也许执行这些脚本的 udev 环境没有定义 PATH。尝试使用 、 等命令的cd完整mkdir路径cp。您可以使用which cdshell 中的命令来查找路径。

相关内容