Linux CygWin下的Shell脚本循环内存不足

Linux CygWin下的Shell脚本循环内存不足,linux,bash,shell,memory,cygwin,Linux,Bash,Shell,Memory,Cygwin,我编写了一个在CygWin下运行的shell脚本,其目的是监视文件的更改。如果MD5散列无法匹配上一个散列,它将执行一个命令来处理该文件。我在哈希检查之间使用了1秒的延迟。这在几个小时内效果很好,但随后会出现“内存不足”错误,实际上会使Windows7崩溃 脚本在循环中使用循环;外部循环在设计上是无限的,内部循环在找到不匹配的散列并处理文件时结束。它在运行内部循环时中断,此时文件未被修改。该文件以前被多次修改,触发了内部循环下面的代码,但不是在内存错误发生时 我只是想知道为什么这里的循环会随着时

我编写了一个在CygWin下运行的shell脚本,其目的是监视文件的更改。如果MD5散列无法匹配上一个散列,它将执行一个命令来处理该文件。我在哈希检查之间使用了1秒的延迟。这在几个小时内效果很好,但随后会出现“内存不足”错误,实际上会使Windows7崩溃

脚本在循环中使用循环;外部循环在设计上是无限的,内部循环在找到不匹配的散列并处理文件时结束。它在运行内部循环时中断,此时文件未被修改。该文件以前被多次修改,触发了内部循环下面的代码,但不是在内存错误发生时

我只是想知道为什么这里的循环会随着时间的推移消耗越来越多的内存。我一遍又一遍地将新的MD5值分配给现有变量,而不是为每个MD5分配分配新的变量。(右??)1秒钟的延迟可能太短了。。。系统是否需要时间在内部循环的每次迭代之间取消分配某些内容

#!/bin/sh

FILE_TO_CHECK=/mypath/style.less

echo "Reading hash for $FILE_TO_CHECK with md5sum"
MD5PRINT=`md5sum $FILE_TO_CHECK | cut -d " " -f1`

MD5PRINTNEW=$MD5PRINT

while [[ 1 = 1 ]]
do
        echo "Waiting for file to change..."

        while [[ "$MD5PRINT" = "$MD5PRINTNEW" ]]
        do
                sleep 1

                MD5PRINTNEW=`md5sum $FILE_TO_CHECK | cut -d " " -f1`
        done

        echo "File was modified ... Running compiler..."

        /mypath/lessc $FILE_TO_CHECK /mypath/style.css -x

        echo "Reading hash for $FILE_TO_CHECK with md5sum"
        MD5PRINT=`md5sum $FILE_TO_CHECK | cut -d " " -f1`

        MD5PRINTNEW=$MD5PRINT
done
任何帮助都将不胜感激。如果需要,我可以提供确切的内存错误,但是我需要一些帮助来了解CygWin中哪些日志(如果有的话)可以查看,可以四处挖掘并找到错误文本。(我不想整天运行它来重现错误。错误肯定与我的CygWin外壳内存不足有关。)谢谢


(如果你提出的解决方案涉及增加CygWin可用的内存,这似乎不合逻辑,因为脚本会随着时间的推移逐渐增加自己的内存使用量。因此,我认为这样的解决方案只会推迟不可避免的事情。)

这是boy uptown发现的信息摘要。记录在案:)

cygwin邮件列表中描述此问题的邮件/线程位于


是指向可能导致cygwin出现此“bloda”问题的应用程序的链接。

您正在运行哪个版本的cygwin?您是否也尝试过使用本机Linux shell?使用几天前刚从其网站安装的最新CygWin。我还没有尝试过其他发行版,但我相当肯定这是CygWin特有的问题。现在我已经把这个问题贴在了上面,并在那里得到了一些有用的回复。很高兴你发现了它是什么,可惜它没有一个好的解决方案。建议您在stackoverflow上用一两句话自己回答您的问题,并在新闻组中链接您的帖子:)