我正在写一个Bash脚本的post-commit钩子,我想向进行提交的客户端传递消息。然而
echo my message >&2
无法传回客户端。使用 post-commit hook 发送信息是否可能?
我正在写一个Bash脚本的post-commit钩子,我想向进行提交的客户端传递消息。然而
echo my message >&2
无法传回客户端。使用 post-commit hook 发送信息是否可能?
如果Hook失败了,它只会显示标准错误输出(STDERR),而不会显示标准输出(STDOUT)。 因此,您必须从脚本返回非零代码才能将“我的消息”传递给用户(只需在echo后添加exit 1)。
请看这里:
如果post-commit钩子返回非零退出状态,则提交不会被中止,因为提交已经完成。 但是,钩子打印到stderr的任何内容都将被封送回客户端,使得更容易诊断Hook失败。
考虑到提交后钩子的作用:
任何钩子输出到错误流中的内容都将被打包回传给客户端,这使得更容易诊断钩子失败的原因。
您可以检查是否存在简单引号问题:
echo "my message" >&2
在这些钩子示例中,您可以看到任何对>&2
的echo
都包含引号。
重定向的bash章节也包含有引号的示例。
但是,正如pmod在他的答案中详细说明的那样,只有当脚本的退出状态与0不同时,标准错误消息才会可见,就像在"subversion post-commit hook: print an error message that the user can see?"中所示。
#!/bin/bash
echo "test" >&2
exit 1
我曾经遇到过同样的问题,涉及 Apache 和 mod_svn。后来发现,当被编组的文本包含 &
、<
或 >
字符时,编组过程会失败。将这些字符替换为 &
、<
和 >
后,文本就可以通过了。