Git-bash và cygwin shell có thể làm những điều tương tự không?


13

Trên Windows 10, git-bash và cygwin shell có thể làm những điều tương tự không?

Người ta có thể làm gì nhưng người kia không thể?

Ví dụ,

  1. Là vỏ sò, cả hai có thể làm việc giống như bash?
  2. Những chương trình và lệnh nào có thể chạy trong một nhưng không phải trong các chương trình khác?

    Ví dụ: trong git-bash, tôi không thể chạy một số lệnh 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.
    

    Nhưng ở Cygwin, nó chạy tốt

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

    ban đầu tôi nghĩ rằng git-bash và cygwin đều có thể chạy các chương trình trong Windows. Vậy tại sao git-bash không hoạt động, trong khi cygwin có thể?

Cảm ơn.

Câu trả lời:


10

Sự khác biệt là Cygwin biết cách xử lý tên gọi "Win32". Nói một cách lỏng lẻo, nó biết rằng "\" là một dấu phân cách tên đường dẫn và không phải là một ký tự thoát vỏ như trong Bash. Lỗi bạn hiển thị là Bash diễn giải "\" là ký tự thoát. (Chỉnh sửa: bạn có thể thử thay thế một \ bằng hai, do đó thoát khỏi dấu gạch chéo ngược, để Bash chuyển lệnh qua để reg.exe chính xác.)

Phải nói rằng, trong khi Cygwin mò mẫm tên đường dẫn của Windows, thì nó không thích làm như vậy. Các tài liệu cảnh báo bạn không sử dụng chúng. Tất nhiên, một chút trượt trở lại bây giờ và sau đó không đau. Nhưng trong khi bạn có thể chạy các chương trình Windows trong Cygwin, vệ sinh khuyên bạn nên chạy các chương trình Windows trong bộ xử lý CMD.EXE và UNIX trong Cygwin vì sự tỉnh táo lâu dài của bạn.


1
Bạn có thể sử dụng cygpath để chuyển đổi giữa các cửa sổ và các định dạng đường dẫn unix.
DavidPostill

Cảm ơn. Tên đường dẫn trong các lệnh của tôi được sử dụng làm khóa trong bảng đăng ký, vì vậy "\" trong chúng có thể được thay thế bằng "/" không?
Tim

Có thể, nhưng xem gợi ý trong câu trả lời (mới được chỉnh sửa).
Luôn luôn học tập vào

1

Có rất nhiều sự chồng chéo giữa hai. Nhưng cuối cùng, chúng là các cách triển khai bash / sẽ khác nhau trong Windows.

Cygwin có một khối lượng lớn phần mềm tùy chọn mà bạn có thể cài đặt, bao gồm nhiều ngôn ngữ lập trình khác nhau, trình biên dịch, các công cụ mạng khác nhau, v.v. Bạn cũng có thể cài đặt X và nhiều ứng dụng X.

Với git bash, bạn sẽ có được những gì bạn nhận được và việc cài đặt các công cụ bổ sung sẽ khó khăn hơn một chút. Tôi thực sự có cả hai trên máy trạm của mình, bởi vì có những điều tôi không thể làm trong git bash. Tôi cũng đã rất thành công khi gọi các ứng dụng cygwin từ cửa sổ git bash.

Ngoài ra, cygwin là một môi trường posix đầy đủ, không chỉ là trình thông dịch bash, vì vậy bạn có thể thường biên dịch mã không được phân phối trong đó, vì vậy, nếu bạn tìm thấy nguồn của một công cụ Linux đẹp mà bạn tìm thấy, bạn thường có thể biên dịch công cụ đó cho Cygwin. Không quá nhiều cho git bash. Và như tôi đã nói ở trên, ngay cả khi bạn biên dịch nó cho Cygwin, nó có khả năng sẽ không hoạt động trong git bash.

Khác hơn là chúng hầu hết rất giống nhau. Thật buồn cười khi thấy git bash bao gồm cygpathlệnh chuyển đổi đường dẫn tệp Windows và Posix, bởi vì git bash afaik dựa trên MinGW, một giải pháp khác biệt với Cygwin.


0

Tôi chỉ tìm thấy một sự khác biệt: tôi có thể chạy tập lệnh này trong Git bash nhưng không phải trong Cygwin.

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

Trong Git bash, nó xử lý các tệp xml của tôi, nhưng trong Cygwin, nó gây ra lỗi cho tôi:

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

bash --version trong Git bash:

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)

Điều này chỉ gợi ý rằng không có tệp nào kết thúc bằng .xml trong thư mục hiện tại trong trường hợp kiểm tra cygwin. Bạn sẽ hiển thị kết quả của lstrong thư mục hiện tại với lệnh.
Peter - Tái lập Monica

Tôi tin rằng đây không phải là trường hợp vì tôi đang chạy cùng một kịch bản trong hai thiết bị đầu cuối cùng một lúc. Các tập tin là ở đó.
WesternGun

2
Có hai khả năng: (1) Không có tệp nào như vậy, có lẽ vì tập lệnh cygwin chạy trong một thư mục khác. Trong trường hợp đó, shell rời khỏi mẫu một mình (thay vì thay thế nó bằng chuỗi rỗng). (Đó là những âm thanh giống như một gần như luôn luôn sai lầm cho đến khi người ta nhận ra rằng người ta có thể vượt qua các mẫu để findnhư vậy không thể viện chứng.) (2) tên Các tập tin thực sự * .xml (ở các thủ đô) và tùy chọn vỏ nocaseglobđược thiết lập trong làm vỏ git trường hợp không nhạy cảm (điều này có ý nghĩa nhất định trên Windows).
Peter - Tái lập Monica
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.