2013-02-11 57 views
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:钩/ - 接收后:语法错误:“(”意外(期待“完成”)

当我尝试在命令行中运行它时,脚本无需此消息即可正常运行。

任何想法?

感谢,

Elyashiv

+1

什么'files_to_notify =($ files_to_notify)'应该做什么? – VonC 2013-02-11 08:48:13

回答

3

两种可能性:

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

  2. 停止使用该数组,因为您不以任何方式使用该数组,因此无法用简单的空格分隔字符串替换它。这就是你首先建立数组的原因。

+0

感谢您的回答!我用bash,它解决了这个问题。 – ElyashivLavi 2013-03-10 11:28:44