2013-10-09 12 views
5

के साथ शैल स्क्रिप्ट परिवर्तन निर्देशिका मुझे पता है कि इस सवाल से कई बार पूछा गया है, लेकिन मुझे अभी भी कोई अच्छा समाधान नहीं मिला। इसलिए, अगर कोई मदद कर सकता है तो फिर से पूछना !!परिवर्तनीय

मैं एक चर की मदद से एक शेल स्क्रिप्ट के अंदर अपनी कार्यशील निर्देशिका को बदलने की कोशिश कर रहा हूं। लेकिन मुझे हर बार " No such file or directory" मिलता है।

#!/bin/bash 
echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name 
cd $RED_INSTANCE_NAME  <-- This line gives the error 

अब, जब मैं बजाय चर का उपयोग कर वास्तव में निर्देशिका का नाम देने की कोशिश, खोल मुद्दों

बिना निर्देशिका में परिवर्तन
cd test <-- No error 

किसी को क्या यहां मुद्दा हो सकता है करता है? कृपया सहायता कीजिए !!

+0

आप 'RED_INSTANCE_NAME' का मूल्य कैसे तय कर रहे हैं? – chepner

+0

'cd "$ {RED_INSTANCE_NAME}" ' – devnull

+0

कहने का प्रयास करें यदि आपको लगता है कि यह प्रश्न पहले से ही पूछा जा चुका है, तो उन समान प्रश्नों से लिंक करना और यह समझना अच्छा होगा कि उत्तर आपके लिए सही क्यों नहीं हैं। –

उत्तर

9

आपके चर में एक कैरिज रिटर्न होता है। कहने का प्रयास करें:

cd $(echo $RED_INSTANCE_NAME | tr -d '\r') 

और इसे काम करना चाहिए। चर से सीआर को निकालने के लिए आप कह सकते हैं:

RED_INSTANCE_NAME=$(echo $RED_INSTANCE_NAME | tr -d '\r') 

निम्न समस्या को वर्णन होगा:

$ mkdir abc 
$ foo=abc$'\r' 
$ echo "${foo}" 
abc 
$ cd "${foo}" 
: No such file or directory 
$ echo $foo | od -x 
0000000 6261 0d63 000a 
0000005 
$ echo $foo | tr -d '\r' | od -x 
0000000 6261 0a63 
0000004 
$ echo $'\r' | od -x 
0000000 0a0d 
0000002 
+0

सूचक के लिए धन्यवाद। मैं वास्तव में चर के अंत में एक कैरिज वापसी थी। – Vivek

+0

या 'cd \' echo $ RED_INSTANCE_NAME | tr -d '\ r' \ '' –

5

इसके अलावा

cd "$RED_INSTANCE_NAME" 

प्रयास करें, सुनिश्चित करें कि पथ वर्तमान निर्देशिका जहां cd आदेश निष्पादित किया जाता है करने के लिए समझ में आता है बनाते हैं।

+1

उत्तर देने के लिए धन्यवाद, लेकिन मैंने इस तरह से भी कोशिश की। लेकिन कोई मदद नहीं। यह अभी भी त्रुटि देता है !! और हाँ, मुझे यकीन है कि मैं इस कमांड को सही निर्देशिका में निष्पादित कर रहा हूं – Vivek

+0

आप क्या त्रुटि देख रहे हैं? यह निष्पादित करने के लिए "bash -x" के माध्यम से चलने का प्रयास करें। –

1

मैं नहीं जानता कि क्या आप के लिए गलत हो रहा है, लेकिन मैं सामान्य सलाह से एक टुकड़ा की पेशकश कर सकते हैं:

cd "$RED_INSTANCE_NAME"  # Quote the string in case it has spaces.error 

आप लगभग हमेशा "$ चर" उद्धरण में रखना चाहिए। यह आश्चर्य से रक्षा करेगा जब चर के मूल्य में मजाकिया सामान (जैसे रिक्त स्थान) शामिल हैं।

+0

उत्तर देने के लिए धन्यवाद, लेकिन मैंने इस तरह से भी कोशिश की। लेकिन कोई मदद नहीं। यह अभी भी त्रुटि देता है !! – Vivek

1

आप गाड़ी रिटर्न के लिए जाँच कर सकते हैं, एएनएसआई बच निकलता है और

cat -v <<< "$RED_INSTANCE_NAME" 

साथ अन्य विशेष वर्ण यह सभी वर्णों कि echo $RED_INSTANCE_NAME सिर्फ छुपाने या उपेक्षा होता दिखाई देगा।

विशेष रूप से, अगर आपके त्रुटि संदेश : No such file or directory है के रूप में bash: cd: yourdir: No such file or directory करने का विरोध किया, तो इसका मतलब है कि आप अपने चर के अंत में एक गाड़ी मुनाफा होता है, शायद एक डॉस स्वरूपित फ़ाइल से इसे पढ़ने से।

2

एक तरह से अपने वर्णित समस्या का सामना करने के लिए एक टिल्ड है (परिवर्तनीय नाम में ~)। इसके बजाय पूर्ण पथ या $HOME चर का उपयोग करें। ध्यान दें कि $HOME का उपयोग करके डबल कोटेशन की आवश्यकता होगी।

# doesn't work 
$ vartilde='~/' 
$ cd $vartilde 
-bash: cd: ~: No such file or directory 

# works 
$ varfullpath='/Users/recurvirostridae' 
$ cd $varfullpath 

# works 
$ varwithhome="$HOME" 
$ cd $varwithhome