Bash

使用修改後的文件內容作為參數

  • September 23, 2014

在一個腳本中,我想清除一個 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即可實際執行命令。

引用自:https://unix.stackexchange.com/questions/157047