2009-02-06 15 views
5

मेरी बैश स्क्रिप्ट में मुझे वर्तमान डीआईआर को उपयोगकर्ता की होम निर्देशिका में बदलने की जरूरत है।शेल स्क्रिप्ट में उपयोगकर्ता के होमडियर में स्क्रिप्ट निर्देशिका बदलें

अगर मैं कमांड लाइन से, उपयोगकर्ता की foo घर dir को बदलना चाहते हैं मैं कर सकते हैं:

cd ~foo 

कौन सा ठीक काम करता है, लेकिन जब मैं स्क्रिप्ट से भी ऐसा ही यह मुझसे कहता है :

./bar.sh: line 4: cd: ~foo: No such file or directory 

इस तरह की सीम इतनी छोटी बात होगी, लेकिन यह काम नहीं कर रही है। यहाँ क्या समस्या है? क्या मुझे "~" या शायद गायब उद्धरण या कुछ और से बचने की ज़रूरत है?

संपादित

जब मैं कहता हूँ उपयोगकर्ता मेरा मतलब नहीं है वर्तमान उपयोगकर्ता है कि स्क्रिप्ट चलाता है, लेकिन सिस्टम पर किसी भी अन्य उपयोगकर्ता सामान्य रूप में

संपादित

यहां लिपि है:

#!/bin/bash 

user="foo" 
cd ~$user 

यदि उपयोगकर्ता नाम की तरह

cd ~foo 

यह काम करता है, लेकिन अगर यह तो उपयोगकर्ता चर में है यह नहीं है hardcoded है। मुझे यहां क्या समझ नहीं आ रहा है?

+0

क्या आप उपयोगकर्ता के लिए होम निर्देशिका चाहते हैं, या उपयोगकर्ता की होम निर्देशिका में निर्देशिका foo चाहते हैं? –

+0

मुझे उपयोगकर्ता foo –

+0

की होम निर्देशिका चाहिए, आपका शेबैंग कैसा दिखता है? –

उत्तर

15

के बारे में क्या
cd $(getent passwd foo | cut -d: -f6) 

और

USER=foo 
eval cd ~$USER 

काम करता है, भी

+0

धन्यवाद! दोनों विधियों ने काम किया। _eval_ मेरे लिए चाल है। –

+0

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

8

बदलें इसे करने के लिए:

cd $HOME 

वास्तव में, मैं नहीं यकीन है कि क्यों cd ~whatever कार्य नहीं करेगा हूँ। मैं तो बस एक छोटी सी स्क्रिप्ट के साथ परीक्षण किया है और यह ठीक काम किया:

#!/bin/bash 

cd ~sbright 

मैं वास्तव में एक ही त्रुटि संदेश है कि आप निर्दिष्ट उपयोगकर्ता सिस्टम पर मौजूद नहीं है जब मिलता है। क्या आप निश्चित हैं (और हां, मुझे पता है कि यह उन लोगों में से एक है-इन-प्लग-इन प्रश्न) कि उपयोगकर्ता मौजूद है और एक वैध होम निर्देशिका निर्दिष्ट है?

संपादित करें:

अब मुझे लगता है कि आप वास्तव में क्या कर रहे हैं ... टिल्ड विस्तार चर प्रक्षेप है, जिसके कारण आपको यह त्रुटि हो रही है इससे पहले कि होता है।

#!/bin/bash 

cd /home/$USER 
पाठ्यक्रम निर्देशिका के

में/सब * nixes पर घर नहीं कर रहे हैं, लेकिन यह सोचते हैं आप जानते हैं कि ओएस/distro अपनी स्क्रिप्ट के लिए लक्षित है, तो आप:

+0

मेरा मतलब है _user_ मेरा मतलब यह नहीं है कि वर्तमान उपयोगकर्ता जो स्क्रिप्ट चलाता है, लेकिन सिस्टम पर कोई अन्य उपयोगकर्ता –

+0

क्या आप अपनी अधिक स्क्रिप्ट पोस्ट कर सकते हैं? –

+0

हाँ उपयोगकर्ता मौजूद है, मुझे पता है कि बस वही सटीक चीज कमांड लाइन –

-1

वहाँ किसी कारण आप ऐसा नहीं कर सकते है कुछ अच्छी तरह से काम करता है जो कुछ के साथ आने में सक्षम होना चाहिए।

+0

से काम करती है त्वरित उत्तर के लिए धन्यवाद लेकिन यह/home/$ USER बस हमारे कॉन्फ़िगरेशन के कारण काम नहीं करेगा। मेरे पर्यावरण में "~" का उपयोग करना उपयोगकर्ता के घर को देखने का एकमात्र व्यवहार्य तरीका है। –

+0

अधिक आम तौर पर, जबकि घर घर निर्देशिका के लिए सामान्य रास्ता है, यह गारंटी नहीं है। मैंने/u/home और/home/user [1-9]/और अन्य व्यवस्थाएं प्रतीत की हैं। – dmckee

0

स्क्रिप्ट उपयोगकर्ता द्वारा चलाया जा रहा है (foo उपयोगकर्ता नाम है)? यदि ऐसा है तो आप बस कर सकते हैं: cd ~

+0

नहीं, स्क्रिप्ट रूट उपयोगकर्ता द्वारा चलाया जाता है और _other_ उपयोगकर्ताओं पर संचालन करता है। –

+0

बश को टिल्डे और वेरिएबल को किसी तरीके से व्याख्या करना चाहिए जिसकी हम उम्मीद नहीं करते हैं। एक बहुत कम निशान और त्रुटि के बाद यह काम करता है: USER = ~ foo; सीडी $ उपयोगकर्ता; –

संबंधित मुद्दे