我一直在研究一个shell脚本,它通过检查svn中的文件并调用Jar来执行一些部署任务。我一直在使用测试SVN网址而没有开发问题。我现在需要测试Tag部署,当我尝试使用输入构建url时,突然svn给我带来了问题。
我正在建立这样的网址:
svnurl=$(echo ${template//[# ]/})
svnurl=$(svn://0.0.0.1/models/tags/"$tag"/"$svnurl")
urls=("${urls[@]}" $svnurl)
与工作代码略有不同:
svnurl=$(echo ${template//[# ]/})
urls=("${urls[@]}" $svnurl)
svn export "$svnurl"
(基本上我是从url-template中取出IP和tag目录)。
现在,当我尝试运行我的shell时,而不是让#34;导出完成" ,我得到以下内容:
./deploy-files.sh: line 36: svn://0.0.0.1/models/tags/201407221642/ResponseA.xsl: No such file or directory
svn: '.' is not a working copy
当我在终端中运行svn export svn://0.0.0.1/models/tags/201407221642/ResponseA.xsl
时,文件正确导出。我检查过并且网址相同。我无法重现'。'无论我尝试什么,都是一个工作副本错误。
注意:svn export -q svn://0.0.0.1/models/tags/"$tag"/deploy-filelist.yml
在脚本中较早使用,并且运行正常
原因是什么?
由于
修改
有关如何构建svn网址的更多信息
urls=()
IFS=$'\n' yaml=($(cat deploy-filelist.yml))
for u in "${yaml[@]}"; do
if [[ $u =~ url.* ]]
then
template=$(echo $u | sed -e 's/url://g' -e 's/"//' -e 's/"$//')
svnurl=$(echo ${template//[# ]/})
svnurl=$(svn://0.0.0.1/models/tags/"$tag"/"$svnurl")
urls=("${urls[@]}" $svnurl)
svn checkout "$svnurl"
fi
done
我从deploy-filelist.yml读取每一行。如果该行包含" url"我删除了所需的字符串并将其添加到模板' svn://....'部分。 url正确形成,因为我可以复制错误消息并使用它来导出文件。
答案 0 :(得分:3)
在这一行:
svnurl=$(svn://0.0.0.1/models/tags/"$tag"/"$svnurl")
您正在尝试执行该字符串,因此“没有此类文件或目录”错误。
您可能希望将值分配给string:
svnurl=svn://0.0.0.1/models/tags/"$tag"/"$svnurl"
或
svnurl="svn://0.0.0.1/models/tags/$tag/$svnurl"