構成行を追加するために、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"
存在しないと出てくるかもしれませんが、実際には存在しません。それなら何もしないでください。ただワイヤー。これをさらにテストすると、キーワードに一致しない行がある限り、一致する結果が得られます。
これが明確になりますように!