2017-09-19 4 views
1

問題は、ファイルが更新されるのを待ちますが、無期限ではありません。だから、I want to check if a file has certain contentsとして - 私は&を使用して別のコマンドと組み合わせることができるように戻り値として条件が真であるかどうかを確認するにはどうすればよいですか?

while ! grep -q $contents /path/to/file 
do 
    sleep $timer 
done 

それに伴い、私は、タイマーが満了しているかどうかを確認したいが、我々は戻り値で応答したいここで$タイマー== 0を言います&その後

! grep -q $contents /path/to/file && ls someFile 

のようなリターンコードがある場合に供給されますと、一時的な変数の必要性が取り除かれます。

私は現在、この方法でそれをやっているが、私はwhile文自体にそれを行うには探しています:数学的表現のために

# Wait for 16, 8, 4, 2, 1 seconds each to check for progress 
waitTime=16 
while ! grep -q $contents $LOG_FILE 
do 
    sleep $waitTime 
    waitTime=$((waitTime/2)) 
    if [ $waitTime -eq 0 ] 
    then 
    break 
    fi 
done 
+0

質問を正しく解析したかどうかは、「一定時間の間、条件が真であるかどうかをポーリングする方法」ですか?そうでない場合は、私の解釈とあなたが求めていた解釈との違いを明確にすることができますか? (もしそうなら、あなたの質問を編集して、意図した焦点をより明確に反映させることはできますか?) –

+0

はい、それは正しいと思います。しかし、テスト結果が戻り値 '$? 'として返されるようにして、whileループ条件そのものに座るようにすることができるかどうかを調べたいと思っています。 –

+0

すべての操作には終了ステータスがあります。すでに実行している '[$ waitTime -eq 0]'にもそれがあります。 –

答えて

2

、算術コンテキストでそれを評価するために(())を使用しています。ここ

#!/usr/bin/env bash 
#    ^^^^- not /bin/sh; (()) -- vs $(()) -- is a bashism. 

waitTime=16 
while ((waitTime)) && ! grep -q -e "$contents" /path/to/file; do 
    sleep "$waitTime" 
    waitTime=$((waitTime/2)) 
done 

((waitTime))0の終了ステータスを有する場合とwaitTimeの値は正の整数である場合にのみ。

関連する問題