make
bashスクリプトから電話しています。スクリプトの残りの部分は、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.