使用修改后的文件内容作为参数

使用修改后的文件内容作为参数

在脚本中,我想清除 Mercurial 存储库,但能够保留我从 $FILENAME 读取的许多(可配置)文件模式。 hg 命令的语法是

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

因此,如果 $FILENAME 包含文件模式列表(每行一个模式),则每个模式必须在前面加上“--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

我根本不明白你为什么要使用grepand 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即可实际运行命令。

相关内容