2017-02-09 2 views
0

몇 개의 폴더를 반복하고 빌드 명령을 실행하는 별칭을 만들려고하지만 출력이 계속 나타나는 것은 for >입니다. 루프를 bash 별칭에 통합하는 방법

내가 내 .zshrc 파일

recurse_build() { 
    for src in `ls`; do 
     cd $src; build; cd .. 
    done 
} 

에있는 기능입니다 그리고 별칭

alias br='recurse_build' 

을 만들려고하지만 다음과 같은 메시지

와 끝까지
for > 

도움이 될 것입니다.

편집 : 기능에서 구문 오류가 수정되었습니다. 복사 붙여 넣기 대신 불량 입력이었습니다

+0

별칭 대신 기능을 사용하는 이유는 무엇입니까? Btw 함수에 구문 오류가 있습니다. – janos

+0

함수를 정의하고 별칭에 매핑하는 이유는 무엇입니까? 함수를 모두 직접 사용하십시오. – Inian

+0

함수 정의가 손상되었습니다 (현재 게시 됨). 그것을 [shellcheck.net] (http://shellcheck.net)에서 분석하십시오. – mklement0

답변

3

명령 대체에 누락 된 역 인용 부호를 제외하고, 이것은 파일을 반복적으로 반복하는 잘못된 방법입니다. glob 패턴을 사용하십시오. pushdpopd를 사용

recurse_build() { 
    for src in */; do 
     pushd "$src" || continue # Don't do anything if pushd fails 
     build 
     popd 
    done 
} 

어디로 돌아 기억하는 것보다 조금 청소기입니다.

+0

빠진 역 인용 부호가 수정되었으며, bash에서 파일을 반복하는 방법에 대해 알지 못했습니다. 나는 당신이 제안한 구문을 시도했지만 실제로 빌드를 수행하는 대신에'for>'프롬프트를 얻는다. 내가 그것을 조금 디버그 할 수 있는지 보도록하겠습니다. 편집 : 그는 직접 작동하지 않으며 제대로 작동하는 것 같습니다. 별칭에서는 작동하지 않지만 함수 호출 만 처리 할 수 ​​있습니다. – jabbajac

1

아마도 오른쪽에 누락 된 백틱이 있지만 ls의 출력을 처리하는 것이 일반적으로 좋지 않습니다. 이것은 작동합니다

recurse_build(){ 
    for src in */; do 
     cd "$src" && ./build && cd .. 
    done 
} 

#TEST 
mkdir -p a b c 
echo 'echo $PWD:$0' |tee a/build b/build c/build >/dev/null 
chmod +x a/build b/build c/build 


recurse_build