2011-07-09 11 views
1

ファイルのMD5ハッシュを生成し、それを以前の実行の保存されたハッシュと比較し、異なっている場合、保存されたハッシュを更新するMakefileルールがあります。 (そのタイムスタンプが常に新しく、彼らは本当に変更かどうMD5ハッシュせずに、私が知っているだろうので、私は、データベースから生成されているいくつかのファイルを持っている。)ここでは、次のとおりです。Bashの条件文がCygwinの下で動作しない

CURR=`$(MD5) -q $<`; \ 
PREV=`if [ -e [email protected] ] ; then cat [email protected] ; fi` ; \ 
if [ "$$CURR" != "$$PREV" ]; then echo $$CURR > [email protected] ; fi 

$(MD5)ここでのCygwin上のMac上md5md5deepあるmd5ツールです。)

これは、Mac OS Xの下bashで正常に動作しますが、Cygwinの下に動作しないいくつかの理由について。私。それは実行されますが、条件は常にtrueに評価されるため、常にハッシュが更新されます。私はecho $$CURR $$PREVを追加しました。ハッシュは同じに見えますが、ハッシュファイルは常に更新されます。

私には何が欠けていますか?

+0

私は、bashの初心者ですが、私は考えていませんif文の後にセミコロンを付ける必要があります。 http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html#sect_07_01_02 –

+1

いいえ、いいね。 – BjoernD

+0

ポイントにならないのですが、なぜMD5を比較するのですか?両方のファイルがある場合は、 'diff -q'を使用してください。 – nhed

答えて

2

echo "'$$CURR' '$$PREV'"と空白を確認してください。私の推測では、一重引用符を使用するときに違いを見つけることができます(周囲の二重引用符は、変数の補間に必要です)。

そのような場合、それを修正する一つの方法は、前には必ず何かが含まれていることを確認しelse echo Xと言って、その後、二重引用符を削除することです:if [ $$CURR != $$PREV ];

+0

あなたは絶対に正しいです!実際、 '$ CURR'の最後に余分なスペースがありました。ありがとう、すべての作品:) –

関連する問題