ファイルが存在しない場合は、行を追加してください

ファイルが存在しない場合は、行を追加してください

構成行を追加するために、Makefileに一連のコマンドを追加したいと思います。まだ出ていない時。私は過去に次のようにこれを行いました。

grep -vq "keyword" /a/b/c.conf && echo "abc keyword" >> /a/b/c.conf

しかし、私は明らかに何かを見落としています。現状のままコマンドを実行すると、再実行すると構成行が重複します。

手動テストでは、このモードが期待どおりに機能することがわかりました。

grep -vq "keyword" /a/b/c.conf && echo "the line is absent"

...印刷行が存在しません。 ただ行が実際に存在しない場合。そしてechoコマンドは正しいです。いいえこの行が実行されるとき展示する。

私は何を見逃していますか?


メモ:上記の例は、読みやすくするために要約されています。実際には同様のコマンドがたくさんあります。私が試した特定のコマンドは次のとおりです。

grep -vq "md_module" /etc/httpd/conf.modules.d/00-ssl.conf && echo "LoadModule md_module module/mod_md.so" >> /etc/httpd/conf.modules.d/00-ssl.会議

ベストアンサー1

問題はgrep -vそれが一致することです。ワイヤー式が一致しないファイルではなく、式が一致しないファイルが...

したがって、ファイルにどの一致しない行はgrep -vその行と一致するため、grepは成功を返します。

より良い方法は、次を使用することです。ポジティブキーワードを一致させたら、必要に応じて||(代わりに)を使用して&&行を追加します。

grep -q "keyword" /a/b/c.conf || echo "abc keyword" >> /a/b/c.conf

テストではecho "the line is absent"存在しないと出てくるかもしれませんが、実際には存在しません。それなら何もしないでください。ただワイヤー。これをさらにテストすると、キーワードに一致しない行がある限り、一致する結果が得られます。

これが明確になりますように!

おすすめ記事