2012-05-25 44 views
3

我是个新手,当涉及到Linux和特别的bash脚本执行SVN命令。庆典其中URL包含空格

基本上就是我想要做的是(在一些混合的bash /伪代码)

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 

我的问题是,不幸的是我们的一些项目,包括名称中有空格。 我能够做到的“进入”部分的一些组装,但在执行时的颠覆命令,在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

使用while循环,而不是一个for环和引号对变量的扩展。将while循环使用进程替换重定向到done

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

感谢您的帮助,但有两件事我不能直接工作。 第一件事是喂入循环,但我通过首先写入文件来解决这个问题。 第二件事是,空间还是被逃脱 下面的测试脚本 的baseUrl = ... SVN列表$的baseUrl> /tmp/projects.txt 而读-r进入 做 SVN共同--depth“文件'“$ baseUrl/$ entry/trunk”“/ tmp/tmp2/$ entry/trunk” done

+0

再次感谢。得到它的工作。这是令人尴尬的,但对于错误的原因是不是20%,而是有该项目不存在一个行李箱子文件夹... *耻辱* –

+0

试图投票你的答案,但我没有足够的声誉 –