テキストが表示されるまで `tail -f`

テキストが表示されるまで `tail -f`

リモートでタスクを開始できるコマンドラインインターフェイスを持つCIサーバーがあります(jenkinsCIサーバーとjenkins-cli.jarツール)。

作業を開始したら、tail -f以下を記録します(コマンドが混乱して申し訳ありません)。

ssh -t my-jenkins-host.com "tail -f \"/var/lib/jenkins/jobs/$job_name/builds/\`ls -ltr /var/lib/jenkins/jobs/$job_name/builds/ | grep '^l' | tail -n 1|awk '{print \$9}'\`/log\""

ジョブが正常に完了すると(通常少なくとも5分)、出力に次の行が表示されます。

Finished: SUCCESS

この時点でログテーリングを停止する良い方法はありますか?同様のコマンドがありますかtail_until 'some line' my-file.log

ボーナス:SUCCESSが一致した場合は0を返し、FAILUREが一致した場合は1を返す答えを提供でき、ソリューションがMacで動作する場合! (私はそれがbsdベースであると信じています)

ベストアンサー1

tail -fにパイプを接続しsedて検索中の行を見つけたら、終了するように指示できます。

tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'

sedデフォルトでは、処理するすべての行を印刷し、その行を見ると終了します。tail次の行を書き込もうとすると、出力パイプが破損していることが判明した場合、プロセスは停止します。

おすすめ記事