循环无法正常工作

循环无法正常工作

我是否错过了一些东西,因为这个循环有时无法正常工作?

#!/bin/bash

Data="/path/to/data.txt"
while true
do
    if [ -f "$Data" ]; then
        rows=$(tail -n +1 "$Data" | wc -l)
            if [ "$rows" = 0 ]; then
                    rm "$Data"
                else
                        line=$(sed -e 1p $Data);
                        IFS=', ' read -a array <<< "$line";
                        exec > >(tee /var/www/report.txt) 2>&1
                        bash -c "/path/to/program.sh -i ${array[0]} -p ${array[1]} -r ${array[2]} -t ${array[3]}" | rm "$Data"
            fi
    fi
   sleep 1
done

无限循环的目的是因为当我调用此脚本时我将其用作后台进程。

答案1

如果我理解正确,某个进程正在覆盖您命名的文件$Data,并且您试图对出现的任何新内容调用命令。您发布的代码存在竞争条件,此时在 tail-wc 测试和 sed 行提取之间传递。

我建议更改要求,以便:

  • 写入脚本将行追加到文件中,而不是覆盖它,并且

  • 读取脚本使用tail来读取新写入的行;你可以使用类似的东西tail -f "$Data" | while read ...

相关内容