0

私はこのような最初のシェルスクリプトを書きました

#!/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 に chmod したことです。

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 に答える