Git Hook预提交错误:找不到命令

时间:2015-06-08 16:36:19

标签: git github vbscript githooks

我有一个简单的git钩子,可以调用其他一些(VBScript)脚本。当我从命令行调用脚本时脚本运行正常,但是当执行钩子时它会给我以下错误:

./RevisionDate.vbs: line 1: syntax error near unexpected token `('
./RevisionDate.vbs: line 1: `Set copyFSO = CreateObject ("Scripting.FileSystemObject")'
.git/hooks/pre-commit: line 8: Start-Sleep: command not found
test
./MovePDF.vbs: line 1: unexpected EOF while looking for matching `''
./MovePDF.vbs: line 6: syntax error: unexpected end of file

这是在钩子中调用的VBScript。

Set copyFSO = CreateObject ("Scripting.FileSystemObject")
    copyFSO.copyFile "C:\Users\Ian\Desktop\Test\*.pdf", "C:\Users\Ian\Desktop\Test2"
    copyFSO.moveFile "C:\Users\Ian\Desktop\Test\*.pdf", "C:\Users\Ian\Desktop\Temp"

'------EXCEL-------

inputPrefix = cint(inputbox("Please enter two digit prefix for file you would like updated.","File Update"))
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
sFolder = "C:\Users\Ian\Desktop\Test"
Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFSO.GetFolder(sFolder).Files
    fileName = oFile
    Set objWorkbook = nothing
    Set objSelection = nothing
    Set objWorksheet = nothing
    If UCase(oFSO.GetExtensionName(oFile.Name)) = "XLSX" Then
    Prefix = left(oFile.Name,2)
    filePrefix = cint(Prefix)
    Set objWorkbook = objExcel.Workbooks.Open(fileName)
    Set objSelection = objExcel.Selection
    Set objWorksheet = objWorkbook.Worksheets(1)        
    objExcel.DisplayAlerts = False
    myYear = Year(Now())
    myMonth = Month(Now())
    myDay = Day(Now())      
    myDate = myYear & "/" & myMonth & "/" & myDay
    myDateFile = myYear & "-" & myMonth & "-" & myDay
    If (filePrefix = inputPrefix) then
        objWorksheet.PageSetup.RightFooter = "Revision Date: " & myDate & " C"
        objWorkbook.Save
    End If
    fileName = Replace(oFile.Name, ".xlsx", "")
    saveAndCloseXlsx objWorkbook    
    End if
Next

Function saveAndCloseXlsx(objWorkbook)
objWorkbook.ExportAsFixedFormat xiTypePDF, "C:\Users\Ian\Desktop\Test\" & fileName
objWorkbook.Close
end Function

'------WORD-------


Set objWord = CreateObject("Word.Application")
objWord.Visible = False
sFolder = "C:\Users\Ian\Desktop\Test"
Set oFSO = CreateObject("Scripting.FileSystemObject")

For Each oFile In oFSO.GetFolder(sFolder).Files
    If UCase(oFSO.GetExtensionName(oFile.Name)) = "DOCX" Then
        fileName = oFile
        Set objDoc = objWord.Documents.Open(fileName)
        Set objSelection = objWord.Selection
        If objDoc.Bookmarks.Exists("RevisionDate") = True Then
            Set objRange = objDoc.Bookmarks("RevisionDate").Range
            myYear = Year(Now())
            myMonth = Month(Now())
            myDay = Day(Now())
            myDate = myYear & "/" & myMonth & "/" & myDay
            myDateFile = myYear & "-" & myMonth & "-" & myDay
            Prefix = left(oFile.Name,2)
            filePrefix = cint(Prefix)
            If (inputPrefix = filePrefix) then
                objRange.text = "Revision Date: " & myDate & " C"
                objDoc.Bookmarks.Add "RevisionDate", objRange
                End If
            wdFormatPDF = 17
            SaveAndCloseDocx objDoc
            End If  
        End if
Next
set oFSO = Nothing
objWord.Quit

Function SaveAndCloseDocx(objDoc)
fileName = Replace(oFile.Name, ".docx", "")
objDoc.SaveAs "C:\Users\Ian\Desktop\Test\" & fileName & ".pdf", wdFormatPDF
objDoc.Close
End Function

最后是钩子本身:

#!/bin/sh
#
# 
echo "Script Running"
cd 'C:\Users\Ian\desktop\QMS_Manual'
"./RevisionDate.vbs"
Start-Sleep -s 30
"./MovePDF.vbs"
cd 'C:\Users\Ian\desktop\Test2'
pdftk *.pdf cat output ECMWC.pdf
cd 'C:\Users\Ian\desktop\QMS_Manual'
DeleteAllButFinal.vbs

有没有人对于为什么会这样?我读过它可能与PATH有关。

1 个答案:

答案 0 :(得分:1)

您可能希望使用以下命令为.vbs脚本添加前缀

cscript yourscript.vbs

你正在运行的是git hook中的bash / sh脚本。

您的bash / sh实现不知道如何处理Start-Sleep,因为这是一个PowerShell命令。你需要找到一些与PowerShell相同的shell或shell来执行该语句。

然后,脚本尝试将RevisionDate.vbsMovePDF.vbs的内容作为bash / sh语句执行,而不是启动通常在cmd.exe命令shell下关联的VBScript解释器。因此,您需要告诉shell脚本如何执行此操作,即cscript yourscript.vbs

<强>路径:

同时观看这些路径。大多数Windows bash / sh shell实现都不知道C:\blah\blah的含义(\用作转义字符)。相反,您需要使用unix样式路径,例如:

'C:\Users\Ian\desktop\Test2'

会转换为:

/c/Users/Ian/desktop/Test2