ファイルに特定の行が含まれているかどうかを確認する必要があります。このファイルは継続的に誰かによって書き込まれるため、whileループ内にチェックを入れます。
FILE="/Users/test/my.out"
STRING="MYNAME"
EXIT=1
while [ $EXIT -ne 0 ]; do
if [ -f $FILE ] ; then CHECK IF THE "STRING" IS IN THE FILE - IF YES echo "FOUND"; EXIT=0; fi
done
ファイルにはテキストと複数行が含まれています。
$FILE
にファイル名が含まれ、$STRING
に検索対象の文字列が含まれる場合、次のコマンドを使用してファイルが一致するかどうかを表示できます。
if [ ! -z $(grep "$STRING" "$FILE") ]; then echo "FOUND"; fi
文字列が変更されたときに、ファイルの変更時刻とgrepをポーリングします。
while :; do
a=$(stat -c%Y "$FILE") # GNU stat
[ "$b" != "$a" ] && b="$a" && \
grep -q "$STRING" "$FILE" && echo FOUND
sleep 1
done
注:BSDユーザーはstat -f%m
を使用する必要があります
試してください:
while : ;do
[[ -f "$FILE" ]] && grep -q "$STRING" "$FILE" && echo "FOUND" && break
done
これは待機せずに継続的にループします。待機時間(この例では5秒)を追加することができます。
while : ;do
[[ -f "$FILE" ]] && grep -q "$STRING" "$FILE" && echo "FOUND" && break
sleep 5
done
与えられたline $ STRINGがファイルFILEに含まれているかどうかをテストするためのより厳密なチェックは、
awk '$0 == "'${STRING}'"' $FILE
これは特に、@ fstabの回答に関する私の懸念に対処します(これは、他のすべての以前の回答にも当てはまります):(上記のgrepソリューションで行われたように)行内の部分文字列の存在だけでなく、完全な行をチェックします。
ループは、他の回答に示されているように実行できます。