Linux Bash脚本:根据文件内容执行操作
我有一个bash脚本,它循环遍历给定路径中的所有文件夹并执行一些操作 我现在需要这个脚本通过监视我将从服务器更新的文件来自行查找给定路径 因此,脚本必须:Linux Bash脚本:根据文件内容执行操作,linux,bash,crontab,Linux,Bash,Crontab,我有一个bash脚本,它循环遍历给定路径中的所有文件夹并执行一些操作 我现在需要这个脚本通过监视我将从服务器更新的文件来自行查找给定路径 因此,脚本必须: 检查文件todo.txt是否存在 读取文件的第一行 在第一行中定义的文件夹内执行操作 删除todo.txt 使用在todo.txt中找到的同一行追加done.txt 出于某种原因,当我直接运行脚本时,它工作得非常完美 cd /proper/path/to/todo FILE=todo.txt if [ -f $FILE ]; then
cd /proper/path/to/todo
FILE=todo.txt
if [ -f $FILE ];
then
FOLDER=$(head -1 $FILE)
echo "path to process:"$FOLDER
fi;
输出良好,文件已读取,输出为“处理路径:/correct/path/read/from/file”
但是,当我设置一个cron作业来运行这个脚本时,$FOLDER变量为空,因此输出只是“path to process:”
请注意:
1.脚本已运行
2.if[-f$FILE]起作用,因此可以找到该文件
只是头命令失败了
有什么想法吗?谢谢 听起来好像
/usr/bin
不在cron的路径中。尝试以下操作:将此条目添加到cron中
* * * * * env > $HOME/cron.env
等一下,看看文件上写的是什么
--而不是表示$(ls)中的i表示*中的文件。由于
for
迭代单词,因此任何带有空格的文件名都将无法正确处理$PATH
不是由cron设置的。您的脚本无法获取head
。如果在cronjob命令行中附加2>&1,您可以记录错误消息如果将FOLDER=$(head-1$FILE)
替换为read FOLDER<“$FILE”
,$()
语法将启动一个新的shell。您可能需要导出PATH
,而不仅仅是设置它。是的,我只是想知道read
是否可以代替head
工作,因为read
是一个内部命令,对于head
您需要一个功能性$PATH
。所以@eduffy可能刚刚给出了正确的答案。
* * * * * env > $HOME/cron.env