0

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

它不返回任何东西。

4

1 回答 1

2

不要使用临时文件,而是使用此处的文档。此外,使用单引号不会让您的变量被扩展:

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 用户没有对您当前目录的写访问权限,或者可能是运行时的另一个目录。

有关此处文档的更多信息,请参见此处,以及有关此处引用的更多信息。

这里的字符串实际上是另一个类似的解决方案,但我相信这里的文档更适合这里。

于 2013-09-19T20:16:10.697 回答