Git hook pre-commit error: "command not found"
Git hook pre-commit error: "command not found"
我有一个简单的 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"
'------ Microsoft 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
'------ Microsoft 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
环境变量有关。
您可能希望在对 .vbs
脚本的调用前加上:
cscript yourscript.vbs
你是 运行 来自 Git 钩子的 Bash/sh 脚本。
您的 Bash/sh 实现不知道如何处理 Start-Sleep
,因为那是一个 PowerShell 命令。您需要找到一些 Bash 等价物或 shell 到 PowerShell 来执行该语句。
脚本然后尝试将 RevisionDate.vbs
和 MovePDF.vbs
的内容作为 Bash/sh 语句执行,而不是启动通常在 cmd.exe
下关联的 VBScript 解释器命令 shell。所以你需要告诉你的 shell 脚本如何做到这一点,即 cscript yourscript.vbs
.
路径:
还要注意那些路径。大多数 Windows Bash/sh shell 实现不知道 C:\blah\blah
是什么意思(\
用作转义字符)。相反,您需要使用 Unix 风格的路径。例如,
'C:\Users\Ian\desktop\Test2'
将转换为:
/c/Users/Ian/desktop/Test2
我有一个简单的 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"
'------ Microsoft 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
'------ Microsoft 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
环境变量有关。
您可能希望在对 .vbs
脚本的调用前加上:
cscript yourscript.vbs
你是 运行 来自 Git 钩子的 Bash/sh 脚本。
您的 Bash/sh 实现不知道如何处理 Start-Sleep
,因为那是一个 PowerShell 命令。您需要找到一些 Bash 等价物或 shell 到 PowerShell 来执行该语句。
脚本然后尝试将 RevisionDate.vbs
和 MovePDF.vbs
的内容作为 Bash/sh 语句执行,而不是启动通常在 cmd.exe
下关联的 VBScript 解释器命令 shell。所以你需要告诉你的 shell 脚本如何做到这一点,即 cscript yourscript.vbs
.
路径:
还要注意那些路径。大多数 Windows Bash/sh shell 实现不知道 C:\blah\blah
是什么意思(\
用作转义字符)。相反,您需要使用 Unix 风格的路径。例如,
'C:\Users\Ian\desktop\Test2'
将转换为:
/c/Users/Ian/desktop/Test2