Bashから特定の出力にコマンドを繰り返します。

Bashから特定の出力にコマンドを繰り返します。

単純なbashスクリプトを書いています。どのように特定の出力文字列を待ってからスクリプトを移動できますか?以下を試しましたが、機能しません

while  [ "$(cat abcd.txt)" != "ocid1.vnic" ]; do cat abcd.txt ;done;

出力にはstartに上記の文字列が含まれており、これは一般的です。それは次のようになります

ocid1.vnic-fdhvndivfudsvu
ocid1.vnic.fjufghug
ocid1.vnic=dugjfjg

この状況で誰でも私を助けることができます:)

答え1

次の行を見つけて行が表示されるまで繰り返すには、シェルでこれを行うのではなく、次のようにしますocid1.vnicgrep

while ! grep -qe '^ocid1.vnic' abcd.txt; do
    sleep .1
    printf .
done

条件付き check の逆方向終了状態でgrep、一致項目が見つかったら真の値を返します。sleepファイルで忙しいループを避けるために追加しましたprintf

毎回ファイル全体を再読み込みするため、ファイルを切り捨てて書き直しても予想される行をキャプチャします。あなたの場合、これが起こっているかどうかはわかりませんが、ファイルが大きくない限り、新しいセクションを読むのに苦労する価値はありません。必要に応じてこれを行うtail -f abcd.txtことができます続行する前に、Bashスクリプトにステータスメッセージを待つようにしてください。

関連情報