2

我正在用 GIT 编写一个接收后脚本。

我附上了它的最小版本,它也失败了:

generate_email()
{
    for user in $(git config --get-all notifications.users); do
        unset files_to_notify
        for filter in $(git config --get-all notifications.$user); do
            files_to_notify=" $files_to_notify $(git diff-tree --no-commit-id \
                --name-only -r $newrev | grep $filter) "
        done
        files_to_notify=( $files_to_notify )
        if [ -n "$files_to_notify" ]; then
            echo ${files_to_notify[*]}
        fi
    done
}

while read oldrev newrev refname
do
    generate_email $oldrev $newrev $refname
done

当我尝试在调用此脚本时推送到 git 服务器时,我收到以下消息:

远程:钩子/接收后:10:钩子/接收后:语法错误:“(”意外(期望“完成”)

当我尝试在命令行中运行它时,脚本可以正常工作而没有此消息。

有任何想法吗?

谢谢,

叶利亚希夫

4

1 回答 1

3

两种可能:

  1. 添加#!/usr/bin/env bash到脚本的顶部以确保脚本由bash而不是运行sh,因为您使用数组、bash扩展名。

  2. 停止使用数组,因为您不会以任何无法用简单的空格分隔字符串轻松替换的方式使用它。这就是您首先构建阵列的方式。

于 2013-02-11T13:59:33.290 回答