![Bash 代码在终端中执行时可以正确运行,但在使用 udev 执行时无法正常运行](https://linux22.com/image/53363/Bash%20%E4%BB%A3%E7%A0%81%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E6%89%A7%E8%A1%8C%E6%97%B6%E5%8F%AF%E4%BB%A5%E6%AD%A3%E7%A1%AE%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E5%9C%A8%E4%BD%BF%E7%94%A8%20udev%20%E6%89%A7%E8%A1%8C%E6%97%B6%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C.png)
我正在尝试将随身碟中存在的各种文件移动到 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 cd
shell 中的命令来查找路径。