检查是否生成了输出文件并使用预期的日志填充-BASH

最后发布: 2014-06-02 12:21:10


问题

一个进程(在后台)应该创建一个文件(例如result.txt),并用5条日志行填充它。

我需要检查:1)文件是否存在,2)检查是否所有日志(5行)都已存储

如果在XXX秒内不满足这些条件,则该过程失败并在终端上打印“ FAILED”,否则打印“ SUCCEED”。

我想我需要使用while循环,但是我不知道如何实现这些条件

注意:这些行是(异步地)追加到文件中的,我不必检查日志的符合性,而只是检查是否已全部存储

bash file while-loop
回答

此日志将检查日志,并在失败前等待2秒钟:

#!/bin/sh

log_success() {
    [[ $(tail -n "$2" "$1" 2> /dev/null | wc -l) -eq "$2" ]]
}

log_success 'file.log' 5 || sleep 2
if log_success 'file.log' 5; then
    echo "success"
else
    echo "fail"
fi


回答

好吧,这是我的初稿:

FILE=/path/to/something
for (( ;; )); do
    if [[ -e $FILE ]] && WC=$(wc -l < "$FILE") && [[ WC -ge 5 ]]; then
        : # Valid.
    fi
done

要么

FILE=/path/to/something
for (( ;; )); do
    if [[ ! -e $FILE ]]; then
        : # File doesn't exist. Do something.
    elif WC=$(wc -l < "$FILE") && [[ WC -ge 5 ]]; then
        : # Valid.
    else
        : # File doesn't contain 5 or more lines or is unreadable. Invalid.
    fi
done

不过,这可能仍然存在比赛条件方面的问题。