क्या git-bash और cygwin शेल समान चीजें कर सकते हैं?


13

विंडोज 10 पर, क्या गिट-बैश और साइबरविन शेल समान चीजें कर सकते हैं?

एक क्या कर सकता है लेकिन दूसरा नहीं कर सकता?

उदाहरण के लिए,

  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.
    

    लेकिन सिग्विन में, यह अच्छी तरह से चलता है

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

    मूल रूप से मैंने सोचा था कि गिट-बैश और साइबरविन दोनों विंडोज में प्रोग्राम चला सकते हैं। तो क्यों साइबर काम नहीं कर सकता है, जबकि cygwin कर सकते हैं?

धन्यवाद।

जवाबों:


10

अंतर यह है कि Cygwin जानता है कि तथाकथित "Win32" मार्गों को कैसे संसाधित किया जाए। धीरे-धीरे बोलना, यह जानता है कि "\" एक पथनाम विभाजक है न कि शेल एस्केप वर्ण जैसा यह बैश में है। आपके द्वारा दिखाई गई त्रुटि बैश को एक एस्केप चरित्र के रूप में व्याख्या कर रही है। (संपादित करें: आप दो के साथ एक \ को प्रतिस्थापित करने का प्रयास कर सकते हैं, इस प्रकार बैकस्लैश से बच सकते हैं, ताकि बैश कमांड को सही ढंग से reg.exe से गुजरता है।)

कहा जा रहा है कि, जबकि Cygwin ने Windows pathnames को ग्रॉस किया है, यह ऐसा करना पसंद नहीं करता है। प्रलेखन उन्हें का उपयोग करने से बंद चेतावनी देते हैं। बेशक, अब थोड़ा पीछे खिसकना और फिर चोट नहीं लगती। लेकिन जब आप Cygwin में विंडोज प्रोग्राम चला सकते हैं, तो हाइजीन का सुझाव है कि आप अपने लॉन्ग-टर्म सैनिटेशन के लिए Cygwin में CMD.EXE प्रोसेसर और UNIX वाले विंडोज प्रोग्राम चलाएं।


1
आप विंडो और यूनिक्स पथ स्वरूपों के बीच कनवर्ट करने के लिए साइबरस्पेस का उपयोग कर सकते हैं ।
DavidPostill

धन्यवाद। मेरे आदेशों में पथनाम रजिस्ट्री तालिका में कुंजियों के रूप में उपयोग किया जाता है, इसलिए क्या उनमें "\" को "/" से बदला जा सकता है?
टिम

हो सकता है, लेकिन (नव संपादित) उत्तर में सुझाव देखें।
आल्टरनेटिंग

1

दोनों के बीच बहुत अधिक ओवरलैप है। लेकिन अंततः वे विंडोज में बैश / करेगा के विभिन्न कार्यान्वयन हैं।

Cygwin में वैकल्पिक सॉफ़्टवेयर की एक बड़ी बॉडी है जिसे आप इंस्टॉल कर सकते हैं, जिसमें कई अलग-अलग प्रोग्रामिंग लैंग्वेज, कंपाइलर, विभिन्न नेटवर्क टूल और इतने पर शामिल हैं। आप X और कई X एप्लिकेशन भी इंस्टॉल कर सकते हैं।

गिट बैश के साथ, आपको वह मिलता है जो आपको मिलता है, और अतिरिक्त टूल को स्थापित करना थोड़ा मुश्किल है। मेरे पास वास्तव में मेरे वर्कस्टेशन पर दोनों हैं, क्योंकि ऐसी चीजें हैं जो मैं गेट बैश में नहीं कर सकता। मुझे बहुत ही सफल सफलता मिली है, जो कि git bash विंडो से भी cygwin apps को बुला रही है।

इसके अलावा, साइबरविन एक पूर्ण सकारात्मक वातावरण है, न कि केवल एक दुभाषिया है, इसलिए आप अक्सर इसके भीतर गैर-वितरित कोड संकलित कर सकते हैं, इसलिए उदाहरण के लिए यदि आपको एक अच्छा लिनक्स टूल मिला है, तो आप आमतौर पर उस टूल को संकलित कर सकते हैं। Cygwin। जीआईटी बैश के लिए इतना नहीं। और जैसा कि मैंने ऊपर उल्लेख किया है, भले ही आप इसे साइगविन के लिए संकलित करते हों, यह संभवत: गिट बैश में काम नहीं करेगा।

इसके अलावा वे ज्यादातर समान हैं। यह देखना मज़ेदार है कि git bash में cygpathWindows और Posix फ़ाइल पथ को परिवर्तित करने के लिए कमांड शामिल है , क्योंकि git bash afaik MinGW पर आधारित है, जो Cygwin का एक अलग समाधान है।


0

मुझे सिर्फ एक अंतर मिला: मैं इस स्क्रिप्ट को गिट बैश में चला सकता हूं लेकिन सिग्विन में नहीं।

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

गेट बैश में, यह मेरी xml फ़ाइलों को प्रोसेस करता है, लेकिन सिग्विन में, यह मुझे त्रुटि देता है:

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)

सिगविन में:

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

यह सिर्फ यह बताता है कि वर्तमान निर्देशिका में कोई फ़ाइल समाप्त होने वाली कोई फ़ाइल नहीं है। आपको lsकमांड के साथ वर्तमान निर्देशिका में परिणाम दिखाना चाहिए ।
पीटर - मोनिका

मेरा मानना ​​है कि यह मामला नहीं है क्योंकि मैं एक ही स्क्रिप्ट को एक ही समय में दो टर्मिनलों में चला रहा हूं। फ़ाइल वहाँ है।
पश्चिमीगंज

2
दो संभावनाएँ हैं: (1) ऐसी कोई फाइल नहीं है, शायद इसलिए कि साइबरविन स्क्रिप्ट एक अलग निर्देशिका में चलती है। उस स्थिति में शेल पैटर्न को अकेला छोड़ देता है (खाली स्ट्रिंग के साथ इसे बदलने के बजाय)। (यह एक लगभग हमेशा गलती की तरह लगता है जब तक कि एक को पता चलता है कि कोई findउस तरीके से पैटर्न को पारित कर सकता है ।) (2) फ़ाइलों के नाम वास्तव में * .XML (राजधानियों में) हैं और शेल विकल्प nocaseglobगिट शेल बनाने में सेट है। ग्लब्स केस असंवेदनशील (जो विंडोज पर एक निश्चित समझ में आता है)।
पीटर -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.