Sử dụng thực thi cygwin trong tập lệnh git bash


9

Tôi có một .shtập lệnh mà tôi bấm đúp để nó được thực thi bởi git cho Windows.

Bây giờ tôi cần (fantemagick) converttừ cygwin (mà tôi đã cài đặt) và tôi đang gọi nó với đường dẫn tuyệt đối của nó - /c/cygwin64/bin/convert.exe- nhưng tôi nhận được:

lỗi nghiêm trọng - phát hiện sự không phù hợp cơ sở cygheap. Vấn đề này có lẽ là do sử dụng các phiên bản không tương thích của cygwin DLL.

Kết thúc convertcuộc gọi thực tế trong cuộc gọi bash cygwin, hoặc thậm chí trong cmd.execuộc gọi, không giúp ích gì. Điều này hơi lạ vì đôi khi tôi sử dụng các tệp thực thi cygwin trực tiếp trong .cmdcác tập lệnh và điều đó luôn hoạt động.

Tôi có thể làm gì? Một giải pháp giữ cho chương trình của tôi giới hạn trong một tệp sẽ được ưu tiên.

. Tôi có thể sẽ làm cho git cho Windows bị lỗi thời tại nơi làm việc của tôi , nếu có thể)


Không trộn và kết hợp các sản phẩm khác nhau dựa trên Cygwin. Sử dụng Cygwin git thay thế.
DavidPostill

Cám ơn bạn đã góp ý. Tôi thấy rõ ràng rằng git cho Windows dựa trên cygwin. Tôi liên tục đọc "MinGW" .. "MSYS", v.v. nghe không giống với cygwin. Nhưng chỉ vì tò mò: những sản phẩm khác dựa trên cygwin?
Một số

Và tôi có đúng rằng Công cụ UnxUtils / GnuWin32 là bản địa của Windows không? Có đúng là Microsoft đang làm việc trên một loại "môi trường giống như Linux" trong Windows (bao gồm cả bash và có thể là những thứ tốt khác) không?
Một số

"Rõ ràng với tôi rằng git cho Windows dựa trên cygwin" Tôi đoán dựa trên thông báo lỗi dll. Bạn có thể kiểm tra xem bạn có nhiều bản sao của cygwin dll trên hệ thống của mình không?
DavidPostill

Windows 10 Anniversary Edition đã giới thiệu một tính năng mới gọi là Windows subsystem cho Linux. Nó bao gồm bash. Tôi không chạy Windows 10 vì vậy tôi không biết nó bao gồm những gì khác.
DavidPostill

Câu trả lời:


7

lỗi nghiêm trọng - phát hiện sự không phù hợp cơ sở cygheap.

Vấn đề này có lẽ là do sử dụng các phiên bản không tương thích của cygwin DLL.

Lỗi này là do đường dẫn Git cho Windows không tương thích với Cywin.

  • Cả hai đều sử dụng /bin/usr/binnhưng các ánh xạ này đến các thư mục khác nhau (vì chúng sử dụng các bảng gắn kết khác nhau).

  • Cywin hy vọng sẽ tìm thấy dll trong /usr/bin/cygwin1.dll(và không tìm thấy trong Git cho Windows)

  • Khi bạn chạy một cách rõ ràng bất kỳ lệnh Cygwin nào trong trình bao Git cho Windows, bashCygwin không thể tìm thấy dll của nó và tạo thông báo lỗi ở trên.

  • Lưu ý bên dưới rằng ánh xạ gắn kết /là khác nhau.

Git cho 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?

Không có giải pháp nào, ngoài việc không trộn lẫn và kết hợp các tiện ích có nguồn gốc cygwin. Chọn một và gắn bó với nó.


1
Cảm ơn đã giải thích. Làm thế nào về một giải pháp?
Jim G.

4
@JimG. Không có cái nào khác, ngoài việc không trộn lẫn và kết hợp các tiện ích có nguồn gốc cygwin. Chọn một và gắn bó với nó.
DavidPostill

1
Không hữu ích vì không có con trỏ để giúp với một giải pháp. Điều này xảy ra đối với nhiều người không có kiến ​​thức để tìm ra nguyên nhân gây ra nó.
Julian Knight

1
Thật không may, bây giờ tôi nhận được điều này với mọi thứ liên quan đến git. Tôi đã cài đặt các phiên bản mới nhưng tôi không sử dụng cygwin một cách rõ ràng, chỉ git. Tôi thậm chí không thể bắt đầu dòng cmd git. Vì vậy, tôi không thể theo dõi những gì gây ra vấn đề và khắc phục nó. Vẫn đang nghiên cứu vấn đề này để xem nó có giúp ích không: github.com/desktop/desktop/issues/3096
Julian Knight

2
Đã sửa lỗi thông qua giải pháp trong liên kết github. Tắt ASLR cho tất cả các tệp thực thi lỗi trong Bảo vệ khai thác Windows. Sau đó nó hoạt động. Không cần gỡ cài đặt git cho Windows. Nó đã làm điều đó bằng cách thêm tên chương trình (ví dụ uname.exe) thay vì đường dẫn đầy đủ.
Julian Knight

0

Tôi gặp vấn đề tương tự trên Windows 10. Tôi đã tự hỏi làm thế nào có thể có nhiều phiên bản CygWin, trong khi tôi không thể tìm thấy ngay cả một cygwin.dll. GitExtensions-> Stash và Git Bash đã bị sập với các thông báo lỗi khác nhau. Giải pháp có tại đây: Truy cập Windows Defender -> Kiểm soát ứng dụng & trình duyệt -> Khai thác bảo vệ. Và tắt ba tùy chọn với ASLR. Bạn phải khởi động lại hệ thống của mình sau đó, nhưng nó thực sự có ích!


đây là một phần của phần bình luận, không trả lời câu hỏi.
Vishrant
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.