การพยายามเชลล์คำสั่ง git อาจทำให้การดีบักได้ยาก ... นี่คือตัวอย่างโค้ดบางส่วน ...
; need quotes for running inside of cmd (w/ comspec)
; super global to reference it in other functions
global gitExe := quote("C:\Program Files\git\bin\git.exe")
tmpFile := A_Temp . "\gittemp.txt"
fileDelete, %tmpFile%
RunWait, %comspec% /c %gitExe% status > %tmpFile%, %A_ScriptDir%, Hide
FileReadLine, tmpVar1, %tmpFile%, 1
FileReadLine, tmpVar2, %tmpFile%, 2
global WorkingDirectory := "C:\Something"
RunWait, %comspec% /c %gitExe% --global http.proxy http://xxx:8080, %WorkingDirectory%, Hide
ไหน ....
Quote(text)
{
return chr(34) . text . chr(34)
}
นี่คือบางสิ่งที่ฉันทำเพื่อแก้ไขปัญหา ...
- การวางคำสั่ง git ในตัวแปรทำให้ง่ายต่อการเปลี่ยนแปลงในภายหลังหรือการอ้างอิง
- ฉันชอบที่จะมี
quote()
ฟังก์ชั่นตั้งแต่การใช้ =
ฉันสับสนและฉันมักจะใช้ :=
บ่อยขึ้น
- การใช้
Runwait
มีประโยชน์ถ้าคุณมีคำสั่งที่ต่อเนื่องเพื่อเรียกใช้ที่ไม่ควรดำเนินการในเวลาเดียวกัน
- การใช้
comspec /c
มีประโยชน์หากคุณต้องการเปลี่ยนเส้นทางสคริปต์เอาต์พุตผ่าน commandline vs. การใช้คำสั่งที่มีในตัวเองทั้งหมด
- หากคุณต้องการดีบักสคริปต์ที่ซับซ้อนยิ่งขึ้นให้ตั้งค่าคำสั่งแบบเต็มที่คุณต้องการเรียกใช้เป็นตัวแปรแล้วถามผู้ใช้ว่าการดำเนินการสำเร็จหรือไม่และหากพวกเขาเลือกไม่ให้คัดลอกเนื้อหาไปยังคลิปบอร์ดเพื่อให้คุณสามารถวางลงบน บรรทัดคำสั่ง. ด้วยวิธีนี้เมื่อคุณไปถึงบางสิ่งที่คุณสามารถตรวจสอบว่ามันใช้งานได้หรือไม่และคุณไม่ได้เปิดหน้าต่างคำสั่งกดวางและดูว่าทำไมจึงล้มเหลว
นั่นคือ
;---------------------------------------------------------------------------------------------------------
; git_CommitAll() - ; Commit everything on the current branch using the commit message
;
;---------------------------------------------------------------------------------------------------------
git_CommitAll(commitMsg)
{
tmpCmd := comspec . " /c " . quote(gitExe . " commit -a -m " . quote(commitMsg))
RunWait, %tmpCmd%, %WorkingDirectory%, hide ; change hard-coded folder as needed
if debug := True ; set this true/false here to use debugging or not
{
msgbox,4,,Did command work right?
IfMsgBox, no
{
clipboard := tmpCmd
msgbox Command has been copied to clipboard`n`n%tmpCmd%`n`nClick OK to continue...
}
}
return True
}