2011-08-22 46 views
0

我有一个小例子脚本,一个更大的脚本的一部分,它工作正常,除了svn提交部分。SVN提交内部的bash脚本无法正常工作

[email protected]:~# cat test.sh 
#!/bin/bash 
CMD="svn update /mnt/checkout/dx-test/" 
echo "INFO>>>: $CMD" 
$CMD 

CMD="svn commit -m 'Updated various bits' /mnt/checkout/dx-test/" 
echo "$CMD" 
$CMD 
[email protected]:~# ./test.sh 
INFO>>>: svn update /mnt/checkout/dx-test/ 
At revision 3. 
svn commit -m 'Updated various bits' /mnt/checkout/dx-test/ 
svn: '/' is not a working copy 
[email protected]:~# svn commit -m 'Updated various bits' /mnt/checkout/dx-test/ 
[email protected]:~# 

我真的不明白如何更新可以工作,但提交没有。 任何帮助将不胜感激。

+0

你的版本控制代码的根源是什么(即带有'.svn'子目录的最高级目录)? – OpenSauce

+0

/mnt/checkout/dx-test/ –

+0

如果你cd到'dx-test'并从那里做一个提交,它会工作吗?我认为'不是工作副本'错误是抱怨'/'不是svn repo的一部分。 – OpenSauce

回答

1

插入它时,单引号字符串不保留引号。

换句话说,你想有

ARGV[0] = svn 
ARGV[1] = commit 
ARGV[2] = -m 
ARGV[3] = Updated various bits 
... 

...但引用的方式工作了,你所得到

ARGV[0] = svn 
ARGV[1] = commit 
ARGV[2] = -m 
ARGV[3] = 'Updated 
ARGV[4] = various 
... 

你可能会更好过使用类似set -x在执行它们时看到这些命令。

+0

星爷这听起来没错, 我想 CMD = “SVN提交-m \” 更新各个位\ “到/ mnt /结算/ DX-测试/” 代替,但现在我得到 ./test.sh:第5行:svn commit -m“更新了各种位”/ mnt/checkout/dx-test /:没有这样的文件或目录 –

+0

重复,你可能最好不要在尝试执行它们之前将您的命令放入一个变量中。如果您需要查看执行的内容,请在脚本的开头添加'set -x'。 – tripleee

+0

这里是我的意思包括的链接:http://mywiki.wooledge.org/BashFAQ/050 – tripleee