Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查输出文件是否生成并填充了预期的日志-BASH_Bash_File_While Loop - Fatal编程技术网

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

检查输出文件是否生成并填充了预期的日志-BASH,bash,file,while-loop,Bash,File,While Loop,一个进程(在后台)应该创建一个文件(例如result.txt)并用5行日志填充它 我需要检查:1)文件是否存在,2)检查是否存储了所有日志(5行) 如果在xxx秒内未满足这些条件,则流程失败,并在终端中打印“失败”,否则打印“成功” 我想我需要使用while循环,但我不知道如何实现这些条件 注意:行被追加到文件中(异步),我不必检查日志的符合性,只需检查是否存储了所有日志。这一行检查日志并等待2秒钟,然后失败: #!/bin/sh log_success() { [[ $(tail -

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

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

如果在xxx秒内未满足这些条件,则流程失败,并在终端中打印“失败”,否则打印“成功”

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


注意:行被追加到文件中(异步),我不必检查日志的符合性,只需检查是否存储了所有日志。这一行检查日志并等待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
对于(;);做
如果[[-e$FILE]]&&WC=$(WC-l<“$FILE”)&&[[WC-ge 5]];然后
:#有效。
fi
完成

FILE=/path/to/something
对于(;);做
如果[!-e$文件]];然后
:#文件不存在。做点什么。
elif WC=$(WC-l<“$文件”)&&&[WC-ge 5]];然后
:#有效。
其他的
:#文件不包含5行或更多行或不可读。无效的
fi
完成

不过,这一行可能仍然存在竞争条件方面的问题。

这些行是否附加到文件中?您需要具体说明行的内容吗?是的,行是附加的,我不必检查日志的符合性,只需检查是否存储了所有行。这意味着您必须在附加新数据之前知道文件中的行数,然后再检查是否添加了另外5行。你的问题实际上很复杂,所以人们可能只有在你添加更多信息时才能提供帮助。检查是什么过程?发送日志的是同一个进程吗?这不是必需的,因为如果该进程成功,那么我将在接下来的步骤中删除该文件。因此,我需要检查文件是否包含5行(后台的进程应该生成此输出,而不是更多行)
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