0

svn start-commit スクリプトをデバッグしようとしていますが、 の値を取得できないようですUSER

#!/bin/sh
USER="$2"
if [ "$USER" = "test" ]; then exit 0; fi 

私はLinuxアカウントを使用しています

echo $USER 
returns test

echo $USERしかし、この start-commit フックは決して 0を返しません。

if [ "$USER" = "test" ]; then exit 0; fi 

私を混乱させる値は返されません。Linux または svn に欠けている魔法はありますか?

またecho $USER > &2、成功せずに stderror に戻ろうとしました

4

3 に答える 3

2

ドキュメントを読んでください。ユーザー名が2番目のパラメーターであると言います。

于 2013-06-24T17:01:54.187 に答える
1

Subversion フックからの出力を表示するには、次の 2 つのことを行う必要があります。

  • (コマンドのデフォルト出力) のSTDERR代わりに、見たいものすべてを出力します。STDOUTecho
  • フックに失敗します。の出口以外のものが必要です0

echo ステートメントは次のようにする必要があります。

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出力が表示されます。

于 2013-06-24T17:27:18.583 に答える
1

からの出力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.*

于 2013-06-24T17:08:56.910 に答える