펜 드라이브에 있는 다양한 파일을 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
셸에서 명령을 사용하여 경로를 찾을 수 있습니다.