パターンがファイルと一致する場合は0を返す方法は? [コピー]

パターンがファイルと一致する場合は0を返す方法は? [コピー]

mkbootimgではなく、Androidカーネルを再パッケージするバイナリがあります。このプロセスを自動化するスクリプトを作成しています。

画面に何の出力も必要ありません。そのため、出力をfoo.logというファイルにリダイレクトします。

コマンドは -kernel_make "$zImage" "$ramdisk" "$cmdline" "$image" &> data/local/working/foo.log

私の現在の作業フォルダはですdata/local/working/。私が望むのは、出力の最後の行(foo.log)が次のような場合です。

"targed file $1 is patched sucesfully, enjoy new kernel"

その後、0を返して終了します。それ以外の場合は1を返し、終了します。

grepを使用して実行しようとしていますが、コマンドラインを初めて使用するので、正しい方法で実行する方法がわかりません。

答え1

グレブ終了デフォルトでは、一致0する場合と1一致しない場合です。だからあなたはこれを行うことができます:

grep -q "targed file \$1 is patched sucesfully, enjoy new kernel" foo.log

すべての出力を抑制します-q

テストするには、次のように話します。

grep -q "targed file \$1 is patched sucesfully, enjoy new kernel" foo.log && echo OK || echo BAD

実際にファイル名で置き換えられた場合、または同じ名前で$1置き換えることができます。\$1.*\S\+

次の点を修正(確認)することも検討できます。

targed     -> target
sucesfully -> successfully

コメントで述べたように、これはファイル全体と一致します。tail@orionの説明に従って使用してください。

答え2

grep一致するものが見つかった場合は0を返す方法です。実際にその行を出力する必要はありませんので、その行を捨ててテストを使用してください。あなたの場合、これはただ

lastline=$(tail -n1 logfile)
if grep pattern <<<"$lastline" &>/dev/null; then
    echo "yay, found pattern"
else
    echo "darn"
fi

<<<文字列をgrep読み取るファイルにレンダリングし、&>標準出力とエラー出力(この場合はnull)をリダイレクトする「ここの文字列」構文を見てください。モードは「Enjoy」または他のものです。 echoをカスタム処理に置き換えます。

kernel_makeただし、失敗した場合に1が返されることを確認する方が合理的です。ユーザーフレンドリーなログ出力を解析する必要はありません(変更される可能性があるか、最後のメッセージではない可能性があります)。もしそうなら(おそらく)私はそうします。

kernel_make [...arguments...] && echo "yay" || echo "nay"

(またはgrepケースのようなifステートメント)。失敗時にexitフォームで使用できるステートメントに精通しています。exit 1

スクリプトの最後の行であればkernel_make何もする必要はありません...

関連情報