Bash
使用修改後的文件內容作為參數
在一個腳本中,我想清除一個 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 參數?
似乎在 mercurial 本身中甚至還有一種速記方式,利用文件列表(#mercurial 中的 mg 建議):
hg purge --all --exclude "listfile:$FILENAME"
grep
我完全不明白你為什麼要使用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
即可實際執行命令。