Вы, кажется, не понимаете, что и куда идет.Python уже записывает сообщение об ошибке в стандартную ошибку, и код return
заканчивается в $?
в оболочке.
Обычно вам не нужно явно проверять $?
очень часто, потому что if
и while
и друзья делают это для вас за кулисами.
Возможно, все, что вы ищете, это
if python /var/www/svn/TEST/hooks/pre-commit-standard-codeline.py "$SVNRepository" "$SVNTransaction"; then
: all good, do nothing
pythonresult=0
else
# error message from Python will already have been printed on stderr
# use lower case for your private variables
pythonresult=$?
cat <<-____eof >&2
$0: Obnoxiously long error message.
$0: The longer you make it, the less people will read it
and the more actually useful information scrolls off the screen.
$0: Python result code was $pythonresult!!!!11!
____eof
fi
exit $pythonresult
Если вы хотите зафиксировать стандартную ошибку, попробуйте
if captured=$(python ... 2>&1); then
# mostly as above
pythonresult=0
# etc
else
# mostly as above
pythonresult=$?
# etc
# but you can use "$captured" to show stderr from Python
# with whatever embellishments and screaming you want
fi
Это немного грязно, потому что смешивает стандартный вывод и стандартную ошибку.
Существуют способы разделить их, если это необходимо, но ваш вопрос и код выглядят так, как будто вы ничего не ожидаете от стандартного вывода.