git post-receive hook:shebang抛出错误(#!/ bin / bash:not found)

时间:2014-07-23 07:33:29

标签: git bash jenkins githooks git-post-receive

我们正在使用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

我们检查了以下内容:

  • bash已安装并正在使用git服务器
  • bash是可执行/可读的所有
  • 将shebang更改为#!/bin/sh#!/bin/dash会抛出相同的错误(使用相应的shell)
  • 删除shebang抛出第二行的错误(找不到echo)但所有其他echo命令将成功执行
  • 删除shebang并添加空的第一行导致
    remote: hooks/post-receive: 1: hooks/post-receive: : not found

有没有人知道我们为什么会收到此错误?这不是很有问题,但知道为什么会发生这种情况以及如何解决这个问题会很好。

系统信息:

  • Linux Debian 7
  • 使用apache服务器完成访问控制
    • www-data user有权访问,阅读和执行收件后挂钩

祝你好运

1 个答案:

答案 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)   脚本解释器被执行。