Bash脚本:根据文件内容执行操作

时间:2013-11-28 19:40:21

标签: linux bash crontab

我有一个bash脚本循环遍历给定路径中的所有文件夹并执行一些操作。

我现在需要这个脚本通过监视我将从服务器更新的文件来自行查找给定路径。

因此,脚本必须:

  1. 检查文件是否存在todo.txt
  2. 阅读文件的第一行
  3. 在第一行中定义的文件夹内执行操作
  4. 删除todo.txt
  5. 使用在todo.txt
  6. 中找到的同一行附加done.txt

    出于某种原因,当我直接运行脚本时,这是完美的

    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变量为空,因此输出只是“处理路径:”

    * * * * * /bin/sh /www/www.mysite.com/myscript.sh >> /www/www.mysite.com/log.txt
    

    请注意: 1.脚本运行 2. if [-f $ FILE]有效,所以找到了文件

    这只是头命令失败。

    有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

听起来/usr/bin不在cron的PATH中。试试这个:将此条目添加到cron

* * * * * env > $HOME/cron.env

等一下,看看该文件说的是什么。


Don't parse ls - 代替for i in $(ls)for file in *。由于for遍历,因此任何具有空格的文件名都无法正确处理