Linux 调试启动提交脚本SVN
我正在尝试调试svn启动提交脚本,但似乎无法获取Linux 调试启动提交脚本SVN,linux,svn,Linux,Svn,我正在尝试调试svn启动提交脚本,但似乎无法获取USER的值 #!/bin/sh USER="$2" if [ "$USER" = "test" ]; then exit 0; fi 我正在使用一个linux帐户,其中 echo $USER returns test 但是这个start-commit钩子永远不会返回0。当我在之前添加echo$USER时 if [ "$USER" = "test" ]; then exit 0; fi 没有返回使我困惑的值。linux或svn中是否有我
USER
的值
#!/bin/sh
USER="$2"
if [ "$USER" = "test" ]; then exit 0; fi
我正在使用一个linux帐户,其中
echo $USER
returns test
但是这个start-commit钩子永远不会返回0。当我在之前添加echo$USER
时
if [ "$USER" = "test" ]; then exit 0; fi
没有返回使我困惑的值。linux或svn中是否有我所缺少的魔力
我还尝试了echo$USER>&2
返回stderror
没有成功。它说用户名是第二个参数。。它说用户名是第二个参数。
stderr
的输出只有在钩子失败时才由Subversion返回给调用方;它不会在成功时传播
如果希望无条件记录,最好登录到文件:
#!/bin/bash
# ^^^^ using /bin/sh turns off bash-specific features; use /bin/bash instead
exec >/tmp/hook-log.$$ 2>&1 # redirects both stdout and stderr to a log file
PS4=':$BASH_SOURCE:$LINENO+' # sets the format string used by set -x to include
# ...source file and line number in each line of
# ...output
set -x # tells the shell to log each command it runs,
# ...prefixed by the evaluated content of the
# ...format string set in PS4
: "$@" # show your argument list in set -x output
# ...rest of your hook here.
…然后,您可以在与
/tmp/hook log.*
匹配的文件中找到会话中的日志。stderr
的输出仅在hook失败时由Subversion返回给调用方;它不会在成功时传播
如果希望无条件记录,最好登录到文件:
#!/bin/bash
# ^^^^ using /bin/sh turns off bash-specific features; use /bin/bash instead
exec >/tmp/hook-log.$$ 2>&1 # redirects both stdout and stderr to a log file
PS4=':$BASH_SOURCE:$LINENO+' # sets the format string used by set -x to include
# ...source file and line number in each line of
# ...output
set -x # tells the shell to log each command it runs,
# ...prefixed by the evaluated content of the
# ...format string set in PS4
: "$@" # show your argument list in set -x output
# ...rest of your hook here.
…然后,您可以在与
/tmp/hook log.*
匹配的文件中找到会话日志。要查看Subversion hook的输出,您需要做两件事:
- 将要查看的所有内容输出到
,而不是STDERR
(STDOUT
命令的默认输出)echo
- 挂断钩子。您需要的不是退出
0
echo "User = '$USER'" >&2
&2
将echo
的输出移动到STDERR
然后,您必须在脚本底部添加一个exit 2
。您将无法提交更改,因为钩子总是会失败,但您将能够看到钩子脚本的输出
我通过记录我对STDERR所做的一切来利用这种行为。如果钩子按计划工作,用户什么也看不到。否则,用户将获得日志输出,可以发送给我进行分析
您可能需要执行以下操作:
USER=$2
if [ $USER = "test" ]
then
exit_code=2
else
exit_code=0
fi
[...]
exit $exit_code
这样,如果用户
test
尝试某项操作,钩子将失败,您将看到所有STDERR
输出。要查看Subversion钩子的输出,您需要做两件事:
- 将要查看的所有内容输出到
,而不是STDERR
(STDOUT
命令的默认输出)echo
- 挂断钩子。您需要的不是退出
0
echo "User = '$USER'" >&2
&2
将echo
的输出移动到STDERR
然后,您必须在脚本底部添加一个exit 2
。您将无法提交更改,因为钩子总是会失败,但您将能够看到钩子脚本的输出
我通过记录我对STDERR所做的一切来利用这种行为。如果钩子按计划工作,用户什么也看不到。否则,用户将获得日志输出,可以发送给我进行分析
您可能需要执行以下操作:
USER=$2
if [ $USER = "test" ]
then
exit_code=2
else
exit_code=0
fi
[...]
exit $exit_code
这样,如果用户
test
尝试某项操作,钩子将失败,您将看到所有STDERR
输出。user=“$2”在我的svn版本(1.7.5)中。user=“$2”
在我的svn版本(1.7.5)中。对不起,这是我的错误,应该是2,但我更感兴趣的问题是,为什么我不能用start-commit脚本中的echo将任何值返回到命令行:)对不起,这是我的错误,应该是2,但我更感兴趣的问题是,为什么我不能从start-commit脚本向带有echo的命令行返回任何值:)$USER=2
是无效语法。也许你的意思是USER=2
?即便如此,这也是一种糟糕的形式——对局部变量使用所有caps名称意味着您可能会与内置变量和环境变量发生命名空间冲突(对于USER
这样的通用名称,这实际上是完全可能的;例如,PAM经常被配置为按该名称导出环境变量),它应该是USER
,而不是$USER
。这就是同时回答Perl和BASH问题时发生的情况。我总是在脚本中使用小写变量名,但在本例中,我只是复制用户的脚本。但是,即使用户重写了一个已建立的内置变量,它也会在脚本运行后恢复到原来的值或用途。这可能就是为什么有如此多的shell脚本使用大写的变量名。感谢您捕获该错误。$USER=2
语法无效。也许你的意思是USER=2
?即便如此,这也是一种糟糕的形式——对局部变量使用所有caps名称意味着您可能会与内置变量和环境变量发生命名空间冲突(对于USER
这样的通用名称,这实际上是完全可能的;例如,PAM经常被配置为按该名称导出环境变量),它应该是USER
,而不是$USER
。这就是同时回答Perl和BASH问题时发生的情况。我总是在脚本中使用小写变量名,但在本例中,我只是复制用户的脚本。但是,即使用户重写了一个已建立的内置变量,它也会在脚本运行后恢复到原来的值或用途。这可能就是为什么有如此多的shell脚本使用大写的变量名。谢谢你抓住了那个虫子。