2012-05-25 3 views
3

저는 리눅스와 특히 bash 스크립팅에있어 초보자입니다.bash는 URL에 공백이 포함 된 svn 명령을 실행합니다.

기본적으로 내가하고 싶은

for entry in `svn list https://svn.xxx.../projects` 
    if already checked out 
    then 
    svn up https://svn.xxx.../projects/$entry some/local/path 
    else 
    svn co https://svn.xxx.../projects/$entry some/local/path 
    fi 

    ... other stuff ... 
done 

내 문제는 우리의 프로젝트의 불행하게도 일부는 이름에 공백이 포함되어 있다는 것입니다 (일부 혼합 bash는/의사 코드)입니다. 나는 'entry'부분을 모아서 만들었지 만, subversion 명령을 실행할 때 url의 공백이 빠져 나갔다. 예 :

svn co "https://svn.xxx.../projects/$myassembly" some/local/path 

svn co https://svn.xxx.../projects/Project%20With%20Space some/local/path 

이되며 URL을 찾을 수 없습니다.

이 문제를 해결하는 방법에 대한 도움을 주시면 감사하겠습니다. 감사합니다

답변

1

루프는 for 루프 대신 while 루프를 사용하고 변수가 확장되는 곳을 인용 부호로 묶습니다. done으로 리디렉션 된 프로세스 대체를 사용하여 while 루프를 보내십시오.

while read -r entry 
do 
    if already checked out 
    then 
    svn up "https://svn.xxx.../projects/$entry" some/local/path 
    else 
    svn co "https://svn.xxx.../projects/$entry" some/local/path 
    fi 

    ... other stuff ... 
done < <(svn list https://svn.xxx.../projects) 
+0

도움 주셔서 감사합니다.하지만 직접 작업하지 못했던 두 가지 사항이있었습니다. 첫 번째 것은 루프에 공급하는 것이었지만 먼저 파일에 쓰는 방법으로 해결했습니다. 두 번째 것은 '공간이 여전히 다음 테스트 스크립트 base을 = ... 목록 $의 base을 svn의 탈출 도착> /tmp/projects.txt 동안은 svn의 공동 --depth을 입력 을 -r 읽을 수 있다는 것입니다 파일에 "$ baseUrl/$ entry/trunk" "/ tmp/tmp2/$ entry/trunk" svn : URL에 공백이 있으면 은 여전히 ​​이와 같은 출력을 생성합니다. : en ".../Some % 20Project/trunk"finns inte –

+0

다시 한번 감사드립니다. 알았어. 당황 스럽지만 오류의 원인은 % 20이 아니라 그 프로젝트에 대한 트렁크 하위 폴더가 존재하지 않는다는 것입니다. * 수치심 * –

+0

답변을 투표하려고 시도했으나 없었습니다. 충분한 평판 –

관련 문제