我写了第一个shell脚本,就像这样
#!/bin/bash
#
# This is a custom post-commit for sending email
# when an svn repo is changed.
#
repodir=$1
revision=$2
author=`/usr/bin/svnlook author -r $revision $repodir`
date=`/usr/bin/svnlook date -r $revision $repodir`
log=`/usr/bin/svnlook log -r $revision $repodir`
info=`/usr/bin/svnlook changed -r $revision $repodir`
url="http://www.mydomain.net/svn/filesystem/$repo"
echo 'To: me@googlemail.com' > commit-message **<<LINE17**
echo 'From: me@mydomain.net' >> commit-message
echo 'Subject: SVN Commit' >> commit-message
echo '' >> commit-message
echo 'repository - $url' >> commit-message
echo 'date - $date' >> commit-message
echo 'username - $author' >> commit-message
echo 'revision - $revision' >> commit-message
echo 'comment - $log' >> commit-message
echo 'test email' >> commit-message
echo '$info' >> commit-message
ssmtp me@googlemail.com < commit-message
rm commit-message
当我在服务器上以我的身份登录测试时(svn vars被剥离):./ post -commit
该脚本运行正常,它将提交文件写入磁盘并与sSMTP结合使用,我在gmail中收到一封电子邮件。
但是,当我使用svn提交文件时,我收到权限错误。
事情是我已经将父目录改为777。
post-commit hook failed (exit code 1) with output:
/home/svn/filesystem/hooks/post-commit: line 17: commit-message: Permission denied
当我尝试通过擦除提交后脚本来查看哪个用户正在运行提交时:
echo $USER
它不会返回任何内容。
答案 0 :(得分:2)
而不是使用临时文件只需使用here文档。此外,使用单引号将不允许扩展您的变量:
ssmtp me@googlemail.com <<EOF
To: me@googlemail.com
From: me@mydomain.net
Subject: SVN Commit
repository - $url
date - $date
username - $author
revision - $revision
comment - $log
test email
$info
EOF
问题顺便说一句,因为svn用户对当前目录没有写入权限,或者可能是运行时的另一个目录。
有关此处文档here的详细信息,以及有关引用here的详细信息。
here string实际上是另一个类似的解决方案,但我相信这里的文档更合适。