Linux 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

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

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

因此,脚本必须:

  • 检查文件todo.txt是否存在
  • 读取文件的第一行
  • 在第一行中定义的文件夹内执行操作
  • 删除todo.txt
  • 使用在todo.txt中找到的同一行追加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变量为空,因此输出只是“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