我一直在研究一个 shell 脚本,它通过从 svn check out 文件并调用 Jar 来执行一些部署任务。我一直在使用测试 SVN url,没有开发问题。我现在需要测试标签部署,当我尝试使用输入构建 url 时,svn 突然给我带来了问题。
我正在构建这样的 url:
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 模板中取出 IP 和标签目录)。
现在,当我尝试运行我的 shell 时,我没有得到“导出完成”,而是得到以下信息:
./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 url 的更多信息
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 格式正确,因为我可以复制错误消息并使用它导出文件。
最佳答案
在这一行中:
svnurl=$(svn://0.0.0.1/models/tags/"$tag"/"$svnurl")
您正在尝试执行字符串,因此出现“没有这样的文件或目录”错误。
您可能想将值分配给字符串:
svnurl=svn://0.0.0.1/models/tags/"$tag"/"$svnurl"
或
svnurl="svn://0.0.0.1/models/tags/$tag/$svnurl"
关于linux - svn 导出在命令行上工作,但在 shell 脚本中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892510/