Bash 코드는 터미널에서 실행될 때 올바르게 실행되지만 udev를 사용하여 실행될 때는 실행되지 않습니다.

Bash 코드는 터미널에서 실행될 때 올바르게 실행되지만 udev를 사용하여 실행될 때는 실행되지 않습니다.

펜 드라이브에 있는 다양한 파일을 PC의 해당 폴더로 이동하려고 합니다. 즉, 음악 파일은 음악 폴더로 이동하고, 텍스트 파일은 문서로 이동하는 식입니다. 이에 대한 스크립트를 작성했으며 ./cpphone.sh를 입력하여 실행하면 제대로 작동하지만(모든 파일이 해당 폴더로 이동됨) udev 규칙을 사용하면 스크립트가 올바르게 실행되지 않습니다(파일이 다음 폴더로 이동되지 않음). 해당 폴더), 에코는 testlog.txt 파일에 저장됩니다. 따라서 스크립트가 실행 중이지만 파일은 이동되지 않습니다. 왜 그럴까요? 스크립트는 루트가 소유합니다.

내 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 cd셸에서 명령을 사용하여 경로를 찾을 수 있습니다.

관련 정보