【发布时间】:2010-11-07 20:40:32
【问题描述】:
我正在编写一些经常写一些东西的 shell 脚本
到一个文件,然后执行读取该文件的应用程序。我发现通过我们公司,网络延迟差异很大,因此例如简单的sleep 2 将不够健壮。
我尝试编写一个(可配置的)超时循环,如下所示:
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
这适用于test="[ -e $somefilename ]"。但是,仅测试存在是不够的,我有时需要测试某个字符串是否写入文件。我试过了
test="grep -sq \"^sometext$\" $somefilename",但这不起作用。谁能告诉我为什么?
还有其他更简洁的选项来执行这样的测试吗?
【问题讨论】:
-
是否可以简单地在文件上运行tail,只检查tail的输出(即最后一行)?这假设 tail 会比你的脚本更聪明地检查文件何时更改(而且很有可能,tail 会以更正确的方式进行)
-
我认为正确的方法将取决于“一些东西”是什么以及“应用程序”是什么。您能否就您要解决的实际问题提供更多详细信息?所写的问题有点含糊;您可能没有想到完全不同的方法。