2009-12-02 2 views
2

이 명령을 자주 입력하고 별명을 지정하려고 했으므로 어떤 이유로 든 할 수 없습니다.awk에 파이프 된 svn 명령의 배시 별칭

for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done 

이것은 분명히 많은 수의 svn 되돌리기를 수행합니다.

나는 그것을 별칭을 때 :

alias revert_all="for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done" 

svn의 합계가 즉시 실행 - 좋은

가 그럼 난 두 번 인용 시도하지 않는 AWK 부분 :

alias revert_all='for FILE in `svn stat | awk "{print $2}"`; do svn revert $FILE; done' 

을하지만,이 제대로 실행되지 않습니다 - awk 부분이 실행되지 않습니다 (나는 M 값을 표시하고 svn 되돌리기 M을 실행하려고합니다).

탈출 한 눈금 따옴표 다음 시도 :

alias revert_all='for FILE in `svn stat | awk \'{print $2}\'`; do svn revert $FILE; done' 

명령이 완료, bash는 다른 틱을 기다리고하지 않는 이유는 무엇입니까?

필자는이 스크립트를 작성하거나 awk 명령을 파일에 넣을 수는 있지만 해결 방법을 찾고있는 것은 아닙니다. 여기에 내가 모르는 뭔가가 있습니다. 이게 뭐야?

TIA

답변

1

역 따옴표로 인해 따옴표를 바로 읽는 것이 어려워집니다.

이 시도 :

alias revert_all='for FILE in $(svn stat | awk '{print $2}'); do svn revert "$FILE"; done' 

$()이 그 안에 따옴표가 외부 따옴표 독립적 일 수 있습니다 사용.

항상 $()never use backticks을 사용하는 것이 가장 좋습니다.

+0

$()의 문제점은 휴대용이 아니며 bash가 널리 보급 되더라도 어디 에나 설치되지 않는다는 것입니다. – mouviciel

+1

음 ... POSIX는'$()'을 지정합니다 : http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_03 - 질문 외에 "[bash]"태그가 붙어 있습니다. –

3

내가하지 당신은 해결 흥미 아니지만, 많은 기본 방법을 보인다. 하지 별명을 수행하지만, 함수로 정의하고 .bashrc에 넣어 : 그냥 테스트

revert_all() { for FILE in `svn stat | awk '{print $2}'`; do svn revert $FILE; done} 

을 :

alias revert_all="for FILE in \`svn stat | awk '{print $2}'\`; do svn revert $FILE; done" 

작품.

 
svn stat | awk '{print $2}' | while read FILE; do svn revert $FILE; done 

다음 평가 후면 사용하는 것입니다

1

가장 간단한 방법은 완전히와 함께 역 따옴표를 방지하는 것입니다.

+0

왜 누군가는 이것을 downvote 했습니까? –

+0

몇 가지 이유 중 하나 : xargs 사용 실패 (많은 사람들이 xargs를 좋아 함), 막연한 응답 w.r.t. eval 또는 가장 가능성이 높습니다. 적절한 해결책은 별칭 대신 함수를 사용하는 것입니다. –

2

svn revert --recursive 할 수 없습니까?

2

왜 별칭을 사용 하시겠습니까? 그것을 함수로 정의하고 파일 안에 넣으십시오. 이것은 "도서관"의 역할을합니다. 함수를 사용하려면 스크립트에서 소스를 가져와야합니다.