git-bash และ cygwin shell สามารถทำสิ่งเดียวกันได้หรือไม่?


13

ใน Windows 10 git-bash และ cygwin shell สามารถทำสิ่งเดียวกันได้หรือไม่?

สิ่งหนึ่งสามารถทำอะไรได้บ้าง แต่อันอื่นไม่สามารถทำได้?

ตัวอย่างเช่น,

  1. ในฐานะเชลล์พวกเขาทั้งสองสามารถทำงานเหมือนกับทุบตีได้หรือไม่?
  2. โปรแกรมและคำสั่งใดที่สามารถทำงานในโปรแกรมหนึ่ง แต่ไม่ทำงานในโปรแกรมอื่น

    ตัวอย่างเช่นใน git-bash ฉันไม่สามารถเรียกใช้คำสั่ง Windows บางคำสั่งได้:

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    ERROR: Invalid syntax.
    Type "REG ADD /?" for usage.
    

    แต่ใน Cygwin มันทำงานได้ดี

    $  reg add "HKCU\Software\Microsoft\VisualStudio\14.0_Config\MSBuild" /v EnableOutOfProcBuild /t REG_DWORD /d 0 /f
    The operation completed successfully.
    

    เดิมทีฉันคิดว่า git-bash และ cygwin สามารถเรียกใช้โปรแกรมใน Windows ได้ ดังนั้นทำไม git-bash จึงไม่ทำงานในขณะที่ cygwin สามารถทำได้

ขอบคุณ

คำตอบ:


10

ความแตกต่างคือ Cygwin รู้วิธีการเรียกชื่อพา ธ "Win32" การพูดอย่างหลวม ๆ จะรู้ว่า "\" เป็นตัวคั่นชื่อพา ธ และไม่ใช่ตัวอักษรยกเว้นของเชลล์เช่นเดียวกับใน Bash ข้อผิดพลาดที่คุณแสดงคือ Bash ตีความ "\" เป็นอักขระเลี่ยง (แก้ไข: คุณอาจลองแทนที่หนึ่ง \ ด้วยสองดังนั้นจึงใช้เครื่องหมายแบ็กสแลชเพื่อให้ Bash ส่งคำสั่งไปยัง reg.exe อย่างถูกต้อง)

ต้องบอกว่าในขณะที่ Cygwin แสวงหาชื่อพา ธ ของ Windows แต่ก็ไม่ต้องการทำเช่นนั้น เอกสารเตือนคุณออกจากการใช้พวกเขา แน่นอนว่าย้อนกลับไปเล็กน้อยแล้วไม่เจ็บ แต่ในขณะที่คุณสามารถเรียกใช้โปรแกรม Windows ใน Cygwin สุขอนามัยแนะนำว่าคุณควรรันโปรแกรม Windows ในโปรเซสเซอร์ CMD.EXE และ UNIX ใน Cygwin เพื่อสุขภาพที่ดีในระยะยาวของคุณ


1
คุณสามารถใช้cygpathเพื่อแปลงระหว่างรูปแบบ windows และ unix path
DavidPostill

ขอบคุณ ชื่อพา ธ ในคำสั่งของฉันถูกใช้เป็นคีย์ในตารางรีจีสตรีดังนั้น "\" ในคำสั่งนั้นสามารถถูกแทนที่ด้วย "/" ได้หรือไม่?
Tim

อาจเป็น แต่เห็นคำแนะนำในคำตอบ (แก้ไขใหม่)
AlwaysLearning

1

มีการทับซ้อนกันระหว่างสองอย่างมาก แต่ท้ายที่สุดแล้วพวกเขาคือการนำไปใช้ที่แตกต่างกันของ bash / must ใน Windows

Cygwin มีซอฟต์แวร์เสริมขนาดใหญ่ที่คุณสามารถติดตั้งได้รวมถึงภาษาการเขียนโปรแกรมที่หลากหลายคอมไพเลอร์เครื่องมือเครือข่ายที่หลากหลายและอื่น ๆ คุณยังสามารถติดตั้ง X และแอปพลิเคชั่น X จำนวนมาก

ด้วย bash git คุณจะได้รับสิ่งที่คุณได้รับและเป็นเรื่องยากมากที่จะติดตั้งเครื่องมือเพิ่มเติม ฉันมีทั้งสองอย่างในเวิร์กสเตชันของฉันเพราะมีสิ่งที่ฉันไม่สามารถทำได้ในการทุบตีคอมไพล์ ฉันประสบความสำเร็จในการเรียกแอป cygwin จากหน้าต่างทุบตี git ด้วย

นอกจากนี้ cygwin เป็นสภาพแวดล้อมแบบเต็มรูปแบบไม่เพียง แต่ล่าม bash ดังนั้นคุณสามารถรวบรวมโค้ดที่ไม่กระจายอยู่ภายในดังนั้นตัวอย่างเช่นหากคุณพบแหล่งที่มาของเครื่องมือ Linux ที่ดีที่คุณพบคุณมักจะรวบรวมเครื่องมือนั้นสำหรับ Cygwin ไม่มากสำหรับทุบตีคอมไพล์ และตามที่ฉันได้กล่าวถึงข้างต้นแม้ว่าคุณจะรวบรวมมันเพื่อ Cygwin ก็มีแนวโน้มที่จะไม่ทำงานในการทุบตีคอมไพล์

นอกเหนือจากนั้นพวกเขาส่วนใหญ่คล้ายกันมาก มันเป็นเรื่องตลกที่เห็นว่า git bash นั้นรวมcygpathคำสั่งสำหรับการแปลงไฟล์พา ธ ของ Windows และ Posix เพราะ git bash afaik นั้นใช้พื้นฐานของ MinGW ซึ่งเป็นโซลูชั่นที่แตกต่างจาก Cygwin


0

ฉันเพิ่งพบความแตกต่าง: ฉันสามารถเรียกใช้สคริปต์นี้ในทุบตี Git แต่ไม่ได้อยู่ใน Cygwin

for file in *.xml; do
    echo "Processing file: $file"
    sed -r 's:<Autorizado>([0-9]+)</Autorizado>:<Autorizado>00013069</Autorizado>:' -i "$file"
    # ...
done

ใน Git bash มันประมวลผลไฟล์ xml ของฉัน แต่ใน Cygwin มันทำให้ฉันมีข้อผิดพลาด:

Processing file: *.xml
sed: cannot read *.xml: No such file or directory

bash --version ใน Git ทุบตี:

GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)

ใน Cygwin:

GNU bash, versión 4.3.46(7)-release (x86_64-unknown-cygwin)

นี่เป็นเพียงการแนะนำว่าไม่มีไฟล์ที่ลงท้ายด้วย. xml ในไดเรกทอรีปัจจุบันในกรณีของการทดสอบ cygwin คุณควรแสดงผลลัพธ์ของlsในไดเรกทอรีปัจจุบันด้วยคำสั่ง
Peter - Reinstate Monica

ฉันเชื่อว่านี่ไม่ใช่กรณีเนื่องจากฉันใช้สคริปต์เดียวกันในเทอร์มินัลสองเครื่องในเวลาเดียวกัน ไฟล์อยู่ที่นั่น
WesternGun

2
มีความเป็นไปได้สองประการ: (1) ไม่มีไฟล์ดังกล่าวอาจเป็นเพราะสคริปต์ cygwin ทำงานในไดเรกทอรีอื่น ในกรณีนั้นเชลล์ปล่อยรูปแบบเพียงอย่างเดียว (แทนที่จะแทนที่ด้วยสตริงว่าง) (ฟังดูเหมือนเป็นข้อผิดพลาดเกือบตลอดเวลาจนกระทั่งมีใครรู้ว่าสามารถส่งรูปแบบไปยังfindที่ไม่ได้กล่าวถึง) (2) ชื่อไฟล์เป็นจริง * .XML (เป็นตัวพิมพ์ใหญ่) และตัวเลือกเชลล์nocaseglobตั้งอยู่ในการสร้างเชลล์ git ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (ซึ่งทำให้รู้สึกบางอย่างใน Windows)
Peter - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.