스크립트에서 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
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
실제로 명령을 실행하려면 삭제하세요 .