Назад | Перейти на главную страницу

Почему этот сценарий не принимает никаких аргументов?

Я пытаюсь написать хук для SVN после фиксации и, как ни странно, зацикливаюсь на том, что должно быть самой простой частью.

Сценарий:

#!/usr/bin/sh
set REPO="$1"
set REV="$2"

set SVNBIN="/opt/CollabNet_Subversion/bin/"
set SSHBIN="/usr/bin/ssh"

set HOST="staging.domain.net"
set timeout=30
set USERNAME="svn-usr"

set E_NO_CONNECT=2
set E_WRONG_PASS=3
set E_UNKOWN=25

set CHANGED=`"$SVNBIN"svnlook changed --revision $REV $REPOS`
echo "Here are changes: $CHANGED" >> /var/svn/repos/www/logs/testing
echo "Command: $0; Repo: $REPO; Rev: $REV; Total: $#" >> /var/svn/repos/www/logs/testing
set PROJECT ""

Но когда я его вызываю, похоже, что он не видит аргументов, которые я ему передаю:

/var/svn/repos/www/logs> sudo ../hooks/post-commit /var/svn/repos/www 33
svnlook: missing argument: --revision
Type 'svnlook help' for usage.
/var/svn/repos/www/logs> cat testing
Here are changes:
Command: ../hooks/post-commit; Repo: ; Rev: ; Total: 1

Это на коробке Solaris 10 SPARC.

Я немного новичок в сценариях, но разве это не должно быть легко ??

set не делает то, что вы думаете: он изменяет позиционные аргументы $1, $2, ... $@и т.д. Он не присваивает переменные.

set REPO="$1"
set REV="$2"

должно быть:

REPO="$1"
REV="$2"

(и т.д)

REPO="$1"
REV="$2"

SVNBIN="/opt/CollabNet_Subversion/bin/"
SSHBIN="/usr/bin/ssh"

HOST="staging.domain.net"
timeout=30
USERNAME="svn-usr"

E_NO_CONNECT=2
E_WRONG_PASS=3
E_UNKOWN=25

CHANGED=`"$SVNBIN"svnlook changed --revision $REV $REPOS`
.....
PROJECT=""

Я не уверен, зачем тебе все это set команды, удалите их и посмотрите, работает ли?