साइगविन - बैश स्क्रिप्ट में cd


12

मैं साइग्विन का उपयोग करने के लिए नया हूं, इसलिए अगर यह बहुत ही नौसिखिया सवाल है तो माफी।

मेरे पास एक bash स्क्रिप्ट है जहां मैं एक डायरेक्टरी में "cd" करता हूं फिर उस डायरेक्टरी में कुछ करता हूं। हालाँकि, cd कमांड "ऐसी कोई फ़ाइल या निर्देशिका / c / कोड / blah / blah" नहीं है।

अगर मैं cd लाइन को सीधे शेल प्रॉम्प्ट में कॉपी करता हूं, तो यह ठीक काम करता है। यह सिर्फ पटकथा में विफल रहता है।

[संपादित करें] अनुरोध के अनुसार, मैंने स्क्रिप्ट से वास्तविक लाइनें जोड़ी हैं:

#!/bin/bash
cd /c/Code/Project

इस के साथ किसी भी मदद के लिए धन्यवाद,
Dan।


1
क्या आप स्क्रिप्ट से वास्तविक लाइन पोस्ट कर सकते हैं?
अगली सूचना तक रोक दिया गया।

जवाबों:


18

आपकी स्क्रिप्ट किस तरह की है? साइगविन बैश स्क्रिप्ट को ठीक से काम करने के लिए (विशेष विकल्प सेट किए बिना), इसके लिए डॉस लाइन एंडिंग (सीआर-एलएफ) के बजाय यूनिक्स लाइन एंडिंग (एलएफ) होना चाहिए। यदि आपने DOS लाइन के अंत के साथ स्क्रिप्ट को सहेजा है, तो bash आपके तर्क को उसी cdरूप में देखेगा /c/Code/Project^M, जहाँ ^Mएक CR है, और उस नाम से निर्देशिका नहीं मिलेगी।

लाइन अंत किस तरह यह है, तो आप निष्पादित कर सकते हैं देखने के लिए file scriptnameहै, जहां SCRIPTNAME स्क्रिप्ट अपनी स्क्रिप्ट का नाम है। स्क्रिप्ट को परिवर्तित करने के लिए ताकि उसमें यूनिक्स लाइन समाप्त हो, निष्पादित हो d2u scriptname

Cygwin बैश स्क्रिप्ट को संपादित करने के लिए नोटपैड का उपयोग न करें। यह हमेशा डॉस लाइन एंडिंग वाली फाइलों को बचाता है।


अहा! वह यह था। मैं इसे संपादित करने के लिए विम का उपयोग कर रहा था। थैंक्यू :-)
दान

विम ठीक काम करेगा। यह स्वचालित रूप से पता लगाता है कि फाइलों में यूनिक्स या डॉस लाइन एंडिंग्स हैं या नहीं और उन्हें उसी तरह से बचाएगा। डिफ़ॉल्ट रूप से, साइग्विन की विम यूनिक्स लाइन एंडिंग के साथ नई फाइलें बनाएगी, लेकिन विंडोज के जीवीएम डॉस लाइन एंडिंग के साथ नई फाइल बनाएगी। आप इसे बदल सकते हैं। देखें :help ffऔर :help ffs
गैरीजोन

Emacs CR-LF के साथ भी बचत कर रहे थे। संपादक में लाइन-एंडिंग स्टाइल बदलना: emacswiki.org/emacs/EndOfLineTips
jfklein

3

जब तक आप ओवरराइड नहीं करते, एक स्क्रिप्ट शेल की अपनी प्रति (आमतौर पर बैश) में निष्पादित होती है। फिर जब स्क्रिप्ट बाहर निकलती है, तो बैश का वह उदाहरण भी बाहर निकल जाता है। तो आपकी स्क्रिप्ट एक नई निर्देशिका में सीडी करती है और फिर बाहर निकलती है, जो आपको मूल बैश में लौटा देती है - जिसने कभी सीडी नहीं बनाई।

इसके आसपास काम करने के दो तरीके। आप एक स्क्रिप्ट के बजाय अन्य उपनाम का उपयोग कर सकते हैं, जैसे कि आपके .profile में

alias mycd="cd /c/Code/Project"

एक और तरीका यह है कि बैश को "डॉट" सिंटैक्स का उपयोग करके एक उपशीर्ष को नहीं देखना है

. myscript

आपने मेरे प्रश्न को गलत बताया है। त्रुटि संदेश, जिसके बारे में मैंने पूछा था वह सीडी कमांड द्वारा लिखा जाता है, जो स्क्रिप्ट के भीतर है। स्क्रिप्ट से बाहर निकलने के बाद मैं वर्तमान निर्देशिका को बदलने के लिए नहीं कह रहा हूं।
Dan

मुझे ओपी के लिए एक समान समस्या थी लेकिन बिना त्रुटि के; इस जवाब ने मुझे बहुत मदद की, भले ही यह "100% ऑन-टॉपिक" न हो।
फ्रॉस्टी जेड

2

आपको अपनी फ़ाइलें / cygdrive / c में मिल सकती हैं ...


1

प्रयत्न:

cd /cygdrive/c/code/blah/blah


वह 'cd c:/code/blah/blah'नहीं' के लिए काम करेगा 'cd /c/code/blah/blah। साथ ही, ' c:' फ़ॉर्म एक स्क्रिप्ट से भी काम करता है; यहां कुछ और याद आ रहा है, प्रश्न को अधिक विस्तार की आवश्यकता है।
निक

यह काम नहीं किया।
दान

@ मि ग: फॉर्म या तो काम नहीं किया। कुछ भी नहीं मैं एक स्क्रिप्ट से काम करने की कोशिश करता हूं। वे सभी कमांड लाइन से काम करते हैं।
दान

1

मेरे पास टिप्पणी करने या वोट करने की प्रतिष्ठा नहीं है लेकिन कार्लफ के जवाब से मुझे मदद मिली।

"तो आपकी स्क्रिप्ट एक नई निर्देशिका में सीडी करती है और फिर बाहर निकलती है, आपको मूल बैश में लौटा देती है - जिसने कभी सीडी नहीं बनाई।"

एक ही स्क्रिप्ट, लेकिन मेरे मामले में, कोई त्रुटि संदेश नहीं।

यह मेरे लिए काम किया:

। myscript.sh

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.