我正在编写shell脚本,其中经常将一些东西写入文件 ,之后执行读取该文件的应用程序。我发现通过我们公司的网络延迟差异很大,所以例如简单的sleep 2
将不够健壮。如何处理shell脚本中的NFS延迟
我试着写一(配置)超时循环是这样的:
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"
,但这没有奏效。有人能告诉我为什么吗?
是否还有其他的,不太详细的选项来执行这样的测试?
是否可以简单地在文件上运行尾部,并只检查尾部的输出(即最后一行)? 这假设尾巴更聪明地检查然后你的脚本检查文件何时更改(机会是,尾巴以更合适的方式) – nos 2009-07-03 15:14:00
我认为正确的方法将取决于“有些东西”是什么以及什么“应用程序”是。你能否提供你想要解决的实际问题的更多细节?所写的问题有点模糊;可能会有完全不同的方法,你没有想到。 – 2009-12-20 09:15:40
看到我编辑的答案。 – 2009-12-24 00:44:46