変更されたファイルの内容をパラメータとして使用する

変更されたファイルの内容をパラメータとして使用する

スクリプトからMercurialリポジトリを消去し、$ FILENAMEから読み取られた多くの(設定可能な)ファイルパターンを保持できるようにしたいです。 hg コマンドの構文は次のとおりです。

hg purge --all --exclude PATTERN1 --exclude PATTERN2 ...

したがって、$ FILENAMEにファイルパターンのリスト(1行に1つのパターン)が含まれている場合は、コマンドラインを設定するには各パターンの前に "--exclude"を付ける必要があります。

現在のアプローチは、
grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo
空白行とタブまたはスペースのみを含む行をスキップするパラメータのリストを作成することです。これを使用して上記のコマンドラインを作成するために使用すると、エラーが発生します。だから全体的に:

hg purge --all `grep -v -E "^[[:blank:]]*$" $FILENAME | sed "s/^/--exclude /g" | xargs echo`

私が知らないいくつかのxargsパラメータを使用するより良い方法はありますか?

答え1

Mercurial自体には、ファイルリストを使用する簡単な方法もあるようです(#mercurialでmgが提案しています)。
hg purge --all --exclude "listfile:$FILENAME"

答え2

grepなぜandを使いたいのか全く理解できませんxargs。次のスキーマファイルが提供されます。

foo
bar
baz

君は走れるよ

$ echo hg purge --all $(perl -pe 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz

でも

$ echo hg purge --all $(sed 's/^/--exclude /' file)
hg purge --all --exclude foo --exclude bar --exclude baz

echo実際にコマンドを実行するには削除してください。

関連情報