ใช้ปฏิบัติการ 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.