svn post-commit shell脚本权限错误

时间:2013-09-19 20:11:43

标签: bash shell svn post-commit

我写了第一个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

它不会返回任何内容。

1 个答案:

答案 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实际上是另一个类似的解决方案,但我相信这里的文档更合适。