bash makeが何かをしたことを確認してください

bash makeが何かをしたことを確認してください

makebashスクリプトから電話しています。スクリプトの残りの部分は、make実際に何かをしている場合にのみ実行できます(つまり、言わない場合nothing to be done for...)。

Bashでどうやって確認できますか?戻りコードは次のとおりです。する発生するため(失敗しない)使用できません。make出力を比較して出力内容が含まれていることを確認するよりも良い方法はありますかnothing to be done for

私はGNU Make 4.0を使用しています。

答え1

ワークフローがそれに対応できる場合は、ファイルをmake更新するために実行する前に練習実行を送信できます。

-q、--質問

「質問モード」。どのコマンドも実行せず、何も印刷しないでください。指定されたターゲットがすでに最新の場合にのみ終了ステータス0を返し、そうでない場合はゼロ以外の値を返します。

--recon(これが行動の一部ではないという事実に少し驚きました。)

答え2

私はこれがあなたが望むことをすると信じています。テストにはGNU grepを使用してください。

mk_output=$(make)   # add whatever make options you use
if printf '%s\n' "$mk_output" | grep -qF 'Nothing to be done for'
then
    echo '"Nothing to be done for" was present in output'
else
    echo '"Nothing to be done for" was NOT present in output'
fi

出力をキャプチャmakeし、grep(Quiet および固定文字列オプション)を使用して目的の文字列を見つけます。終了状態は見つかった場合は0 grep、見つからない場合は1です。

以来考える:

makeこれは通常多くの出力を生成するため、最初の行を次のように変更することをお勧めします。

mk_output=$(make (make options) | grep -qF 'Nothing to be done for')

この場合、mk_outputスケールはそれほど大きくありません。

make実行中に出力を表示してキャプチャするには、ファイルteeとしてキャプチャを使用します。

make | tee make_output
if grep -qF 'Nothing to be done for' make_output
then etc.

関連情報