2013-01-23 45 views
5

बदलते समय आदेश चलाएं मैं एक लिनक्स पर्यावरण में काम करता हूं जहां विभिन्न मॉड्यूल को विभिन्न कार्य क्षेत्रों के लिए लोड करने की आवश्यकता होती है। ये अलग-अलग फाइल सिस्टम निर्देशिकाओं से अलग होते हैं।लिनक्स टर्मिनल: निर्देशिका

मुझे आश्चर्य है कि निर्देशिका में प्रवेश करते समय अलग-अलग 1 लाइन कमांड चलाने का कोई आसान तरीका है या नहीं। मैं उपयोग किए जाने वाले खोल के प्रकार के साथ लचीला हूं, लेकिन वर्तमान में सी शैल का उपयोग कर रहा हूं।

उत्तर

6

आप बैश उपयोग कर रहे हैं, मैं तुम्हें सिफारिश करेंगे इस तरह एक समारोह बनाने के लिए:

function custom_cd() { custom_command $1; cd $1; } 
alias cd='custom_cd' 

यहां आपका कस्टम आदेश कुछ भी हो सकता है जो विशिष्ट आदेशों को निष्पादित करेगा आपके द्वारा दर्ज निर्देशिका में।

बाद में घोषित उपनाम यह सुनिश्चित करता है कि टाइपिंग 'सीडी' फ़ंक्शन और असली सीडी कमांड का आह्वान करेगी।

संपादित: अपनी जरूरत के लिए एक उदाहरण

function custom_cd() { 
    if [ -z "$1" ]; 
    then 
     target=~ 
    else 
     target=$1 
    fi 
    target=${target%/} 
    parent=$(dirname `readlink -f $target`) 
    grand_parent=`dirname $parent` 
    script=$grand_parent/`basename $target`.sh 
    if [ -x $script ]; 
    then 
     `$script` 
    fi 
    cd $1 
} 

स्पष्टीकरण:

हम एक चर निर्देशिका आप दर्ज करना चाहते हैं की मूल युक्त पैदा करते हैं। फिर हम माता-पिता के माता-पिता को पुनर्प्राप्त करते हैं। फिर हम दादाजी निर्देशिका में स्क्रिप्ट नाम बनाते हैं।

फिर इस फ़ाइल नाम की निष्पादन योग्यता की जांच की जाती है, यदि हां, तो स्क्रिप्ट निष्पादित की जाती है, और अंत में वास्तविक सीडी कमांड निष्पादित होता है।

उपनाम से पहले फ़ंक्शन को परिभाषित करने के लिए सावधान रहें, अन्यथा यह अनंत रिकर्सन का कारण बन जाएगा!

+1

सुरक्षा के लिए, फ़ंक्शन में 'अंतर्निहित सीडी' का उपयोग यह सुनिश्चित करने के लिए करें कि आप उपनाम को मार नहीं रहे हैं। वास्तव में, यदि आप "बिल्टिन" कमांड का उपयोग करते हैं, तो आपको उपनाम की आवश्यकता नहीं है, आप फ़ंक्शन "cd" नाम दे सकते हैं। –

+1

@glennjackman को बिल्टिन के बारे में पता नहीं था, मुझे संदेह था कि इस तरह कुछ ऐसा था, अच्छा! – SirDarius

+0

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

2

एक बहुत अस्पष्ट सवाल है, लेकिन मुझे लगता है alias आदेश आप मदद कर सकता है:

alias cd='echo "hello $1"' 

इस hello <arg given to cd> प्रदर्शित करेगा जब आप सीडी करने की कोशिश कहीं

+0

मुझे लगता है कि यह काफी अस्पष्ट था। मुझे पूरे फाइल सिस्टम के एक छोटे से सबसेट के लिए एक अलग कमांड चलाने की जरूरत है। उदाहरण के लिए, यदि मैं निर्देशिका/घर/उपयोगकर्ता/ए दर्ज करना चाहता हूं तो मैं /home/a.csh चलाऊंगा। फिर, यदि मैं/home/scripts/b दर्ज करता हूं तो मैं /home/b.csh – devshans

+0

चलाता हूं जो मैंने आपको दिया है वह स्टार्टर है। उदाहरण के लिए यह काम नहीं करेगा यदि आप gnome, या किसी अन्य फ़ाइल प्रबंधक का उपयोग करते हैं। मुझे कुछ ट्रिगरों से अवगत नहीं है जिन्हें आप निर्देशिका बदलते समय कस्टम निष्पादित किया जा सकता है। हो सकता है कि आप सुरक्षा नीतियों से संबंधित कुछ चीज़ों में हुक कर सकें –

3

आप उन विशेष आदेशों को चलाने के लिए एक फ़ंक्शन कर सकते हैं।

run_command() { 
    case `pwd` in 
    "/path/to/dir1") 
     ... 
     ;; 
    "/path/to/dir2") 
     ... 
     ;; 
    ... 
    esac 
} 

तो फिर तुम, उदाहरण के लिए एक और समारोह के साथ cd के साथ कि फ़ंक्शन को कॉल करें।

cd2() { 
    cd $1 
    run_command 
} 

cd2 /path/to/somewhere