ใช้ปฏิบัติการ cygwin ในสคริปต์ bash git


9

ฉันมี.shสคริปต์ที่ฉันคลิกสองครั้งเพื่อเรียกใช้งานโดย git สำหรับ Windows

ตอนนี้ฉันต้องการ (imagemagick) convertจาก cygwin (ซึ่งฉันได้ติดตั้งแล้ว) และฉันกำลังเรียกมันด้วยเส้นทางที่สมบูรณ์/c/cygwin64/bin/convert.exe- แต่ฉันได้รับ:

ข้อผิดพลาดร้ายแรง - ตรวจพบไม่ตรงกันฐานไซเบอร์ ปัญหานี้อาจเกิดจากการใช้ cygwin DLL รุ่นที่เข้ากันไม่ได้

การตัดการconvertโทรจริงในการโทร bash cygwin หรือแม้กระทั่งในการcmd.exeโทรไม่ได้ช่วยอะไร มันค่อนข้างแปลกเพราะบางครั้งฉันก็ใช้โปรแกรมปฏิบัติการ cygwin โดยตรงใน.cmdสคริปต์และมันก็ใช้ได้เสมอ

ฉันควรทำอย่างไร โซลูชันที่ช่วยให้โปรแกรมของฉัน จำกัด เพียงหนึ่งไฟล์

(ฉันรู้ว่าฉันอาจจะแค่ติดตั้ง imagemagick ของ Windows แต่ในวันถัดไปฉันต้องการเครื่องมือ cygwin อื่นใน git-for-Win-Shellscript .. และฉันก็อยากจะเข้าใจว่าเกิดอะไรขึ้นที่นี่และใช่ ฉันอาจจะทำให้คอมไพล์สำหรับ Windows ล้าสมัยในที่ทำงานของฉันถ้าเป็นไปได้)


อย่าผสมและจับคู่ผลิตภัณฑ์ที่แตกต่างกันตาม Cygwin ใช้ Cygwin git แทน
— DavidPostill

ขอบคุณสำหรับความคิดเห็นของคุณ สำหรับฉันมันไม่ชัดเจนว่าคอมไพล์สำหรับ Windows นั้นมาจาก cygwin ฉันอ่าน "MinGW" อย่างต่อเนื่อง .. "MSYS" ฯลฯ ซึ่งไม่ได้ฟังเหมือน cygwin แต่สำหรับความอยากรู้: ผลิตภัณฑ์อะไรบ้างที่มีพื้นฐานมาจาก cygwin?
— SomeDev

และฉันถูกต้องไหมว่าเครื่องมือ UnxUtils / GnuWin32 เป็นระบบปฏิบัติการ Windows เป็นความจริงหรือไม่ที่ Microsoft กำลังทำงานกับ "สภาพแวดล้อมคล้าย Linux" ใน Windows (รวมถึงการทุบตีและสิ่งอื่น ๆ )
— SomeDev

"มันไม่ชัดเจนสำหรับฉันว่า git สำหรับ Windows นั้นมาจาก cygwin" ฉันคาดเดาจากข้อความแสดงข้อผิดพลาด dll คุณสามารถตรวจสอบว่าคุณมี cygwin dll หลาย copes บนระบบของคุณหรือไม่?
— DavidPostill

Windows 10 Anniversary Edition เปิดตัวคุณสมบัติใหม่ที่เรียกว่า Windows Subsystem สำหรับ Linux มันรวมถึงการทุบตี ฉันไม่ได้ใช้ Windows 10 ดังนั้นฉันจึงไม่ทราบว่ามีอะไรรวมอยู่ด้วย
— DavidPostill

คำตอบ:


7

ข้อผิดพลาดร้ายแรง - ตรวจพบไม่ตรงกันฐานไซเบอร์

ปัญหานี้อาจเกิดจากการใช้ cygwin DLL รุ่นที่เข้ากันไม่ได้

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากพา ธ Git สำหรับ Windows ไม่สามารถใช้ร่วมกับ Cywin ได้

  • พวกเขาทั้งสองการใช้งาน/binและ/usr/binแต่แผนที่เหล่านี้ไปยังไดเรกทอรีที่แตกต่าง (เพราะพวกเขาใช้ที่แตกต่างกันติดตาราง)

  • Cywin คาดว่าจะพบ dll ใน/usr/bin/cygwin1.dll(และไม่พบใน Git สำหรับ Windows)

  • เมื่อคุณเรียกใช้อย่างชัดเจนใด ๆคำสั่ง Cygwin ใน Git สำหรับ Windows bashเปลือก Cygwin ไม่สามารถหา dll และสร้างข้อผิดพลาดดังกล่าวข้างต้น

  • โปรดสังเกตด้านล่างว่าการแมปเมาต์สำหรับ/นั้นแตกต่างกัน

Git สำหรับ Windows:

DavidPostill@Hal MINGW64 ~
$ mount
C:/temp on /tmp type ntfs (binary,noacl,posix=0,usertemp)
C:/apps/Git on / type ntfs (binary,noacl,auto)
C:/apps/Git/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)
E: on /e type vfat (binary,noacl,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,noacl,posix=0,user,noumount,auto)

DavidPostill@Hal MINGW64 ~
$ which cygwin1.dll
which: no cygwin1.dll in (/c/Users/DavidPostill/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin:/usr/bin:/c/Users/DavidPostill/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/c/apps/WSCC/Sysinternals Suite:/c/apps/WSCC/NirSoft Utilities:/c/apps/Calibre:/cmd:/mingw64/bin:/usr/bin:/usr/bin/vendor_perl:/usr/bin/core_perl)

DavidPostill@Hal MINGW64 ~
$ /c/cygwin/bin/man
      1 [main] man (608) C:\cygwin\bin\man.exe: *** fatal error - cygheap base mismatch detected - 0x180301408/0x180304408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.
Segmentation fault

Cygwin:

$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /c type ntfs (binary,posix=0,user,noumount,auto)
E: on /e type vfat (binary,posix=0,user,noumount,auto)
F: on /f type ntfs (binary,posix=0,user,noumount,auto)
$ which cygwin1.dll
/usr/bin/cygwin1.dll
$ /c/cygwin/bin/man
What manual page do you want?

ไม่มีวิธีแก้ปัญหานอกจากจะไม่ผสมและจับคู่ยูทิลิตี้ที่ได้รับจาก cygwin เลือกหนึ่งและติดกับมัน


1
ขอบคุณสำหรับคำอธิบาย วิธีการแก้ปัญหา?
— Jim G.

4
@JimG ไม่มีอย่างใดอย่างหนึ่งนอกจากจะไม่มิกซ์และจับคู่ยูทิลิตี้ที่ได้รับจาก cygwin เลือกหนึ่งและติดกับมัน
— DavidPostill

1
ไม่เป็นประโยชน์เนื่องจากไม่มีตัวชี้ที่จะช่วยแก้ไขปัญหา นี่คือสิ่งที่เกิดขึ้นสำหรับคนจำนวนมากที่ไม่มีความรู้ในการหาสาเหตุที่เกิดขึ้น
— Julian Knight

1
น่าเสียดายที่ตอนนี้ฉันได้รับสิ่งนี้ทุกอย่างที่เกี่ยวข้องกับคอมไพล์แล้ว ฉันติดตั้งเวอร์ชันใหม่แล้ว แต่ฉันไม่ได้ใช้ cygwin อย่างชัดเจนเพียงแค่คอมไพล์ ฉันไม่สามารถเริ่มบรรทัด git cmd ได้ ดังนั้นฉันไม่สามารถติดตามสิ่งที่เป็นสาเหตุของปัญหาและแก้ไขได้ ยังคงทำงานผ่านสิ่งนี้เพื่อดูว่าสามารถช่วยได้หรือไม่: github.com/desktop/desktop/issues/3096
— Julian Knight

2
แก้ไขผ่านทางโซลูชันในลิงค์ github ปิด ASLR สำหรับ executables ที่เป็นข้อผิดพลาดทั้งหมดใน Windows Exploit Protection มันได้ผลแล้ว ไม่จำเป็นต้องถอนการติดตั้ง git สำหรับ Windows มันทำได้โดยการเพิ่มชื่อโปรแกรม (เช่น uname.exe) แทนที่จะเป็นเส้นทางแบบเต็ม
— Julian Knight

0

ฉันมีปัญหาเดียวกันใน Windows 10 ฉันสงสัยว่าเป็นไปได้อย่างไรที่จะมี CygWin หลายรุ่นในขณะที่ฉันไม่สามารถหาแม้แต่หนึ่ง cygwin.dll GitExtensions-> Stash และ Git Bash ชนกับข้อความแสดงข้อผิดพลาดที่แตกต่างกัน โซลูชันอยู่ที่นี่: ไปที่ Windows Defender -> การควบคุมแอปและเบราว์เซอร์ -> ใช้ประโยชน์จากการป้องกัน และปิดสามตัวเลือกด้วย ASLR คุณต้องรีสตาร์ทระบบหลังจากนั้น แต่มันช่วยได้จริงๆ!


นี่เป็นส่วนหนึ่งของส่วนความคิดเห็นไม่ตอบคำถาม
— Vishrant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.