我们正在使用git服务器端钩子来通知接收后事件的jenkins构建。
脚本本身按预期工作,成功执行。
#!/bin/bash
echo "Notifying Jenkins"
while read oldrev newrev refname
do
if [ "$newrev" != "0000000000000000000000000000000000000000" ] #do not notify jenkins for deleted branches, print message instead
then
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
echo "== $branch =="
curl -s "http://[JENKINS_DOMAIN]/git/notifyCommit?url=[PUSH_URL]"
else
echo "DELETED REMOTE BRANCH >$refname<, REMOVE JENKINS JOB IF EXISTING"
fi
done
我们遇到的唯一问题是我们从shebang行#!/bin/bash
的脚本执行中收到一条错误消息,其中包含以下内容:
remote: hooks/post-receive: 1: hooks/post-receive: #!/bin/bash: not found
我们检查了以下内容:
#!/bin/sh
或#!/bin/dash
会抛出相同的错误(使用相应的shell)remote: hooks/post-receive: 1: hooks/post-receive: : not found
有没有人知道我们为什么会收到此错误?这不是很有问题,但知道为什么会发生这种情况以及如何解决这个问题会很好。
系统信息:
祝你好运
答案 0 :(得分:1)
shebang可能会与UTF-8文件的BOM交互。将文件保存为UTF-8,不含BOM。
Wikipedia - Shebang#Magic_number
shebang字符由相同的两个字节表示 扩展的ASCII编码,包括常用的UTF-8 当前类Unix系统上的脚本和其他文本文件。然而, UTF-8文件可以以可选的字节顺序标记(BOM)开头;如果 “exec”函数专门检测字节0x23 0x21,然后是 在shebang阻止之前存在BOM(0xEF 0xBB 0xBF) 脚本解释器被执行。