एक विशिष्ट कार्य निर्देशिका के साथ एक कमांड निष्पादित करने के लिए, एक आमतौर पर करता है
( cd directory && utility )
चारों ओर कोष्ठक का cd ...
अर्थ है कि कमांड (एस) उसमें एक उपधारा में चलता है। कार्यशील निर्देशिका को एक उपधारा में बदलने से यह ऐसा हो जाता है कि कॉलिंग शेल की वर्तमान कार्यशील निर्देशिका को परिवर्तित नहीं किया जाता है, अर्थात, इस कमांड को कॉल करने के बाद, आप अभी भी उसी निर्देशिका में स्थित होंगे जहां आपने शुरुआत की थी।
उदाहरण:
( cd / && echo "$PWD" ) # will output "/"
echo "$PWD" # will output whatever directory you were in at the start
इसे जेनेरिक उपनाम में नहीं बदला जा सकता क्योंकि एलियास कोई तर्क नहीं दे सकता।
एक विशिष्ट निर्देशिका और उपयोगिता के लिए, कोई भी ऐसा कर सकता है
alias cdrun='( cd "$HOME/somedir" && ./script.sh )'
लेकिन सामान्य मामले के लिए, आपको एक शेल फ़ंक्शन का उपयोग करना होगा:
cdrun () {
( cd "$1" && shift && command "$@" )
}
या
cdrun () (
cd "$1" && shift && command "$@"
)
फ़ंक्शन के शरीर के चारों ओर कोष्ठक के साथ घुंघराले ब्रेसिज़ को बदलने से फ़ंक्शन अपने स्वयं के सबहेल में निष्पादित होता है।
इस रूप में इस्तेमाल किया जाएगा
$ cdrun "$HOME/somedir" ./script.sh
जो script.sh
निर्देशिका में स्थित स्क्रिप्ट को कार्यशील निर्देशिका के $HOME/somedir
साथ चलाएगा $HOME/somedir
, या
$ cdrun / ls -l
जो आपको रूट डायरेक्टरी के "लॉन्ग फॉर्मेट" में डायरेक्टरी लिस्टिंग प्रदान करेगा।
शेल फ़ंक्शन इसका पहला तर्क लेता है और उस निर्देशिका में बदलने का प्रयास करता है। यदि वह काम करता है, तो वह निर्देशिका नाम को स्थितीय मापदंडों (कमांड लाइन तर्क सूची) से हटा देता है और बाकी तर्कों द्वारा दिए गए कमांड को निष्पादित करता है। command
शेल में एक अंतर्निहित कमांड है जो केवल एक कमांड के रूप में अपने तर्कों को निष्पादित करता है।
यदि आप किसी परिवर्तित कार्य निर्देशिका के साथ कमांड निष्पादित करना चाहते हैं, तो यह आवश्यक है । यदि आप बस कहीं और स्थित आदेश को निष्पादित करना चाहते हैं, तो आप स्पष्ट रूप से उपयोग कर सकते हैं
alias thing='$HOME/somedir/script.sh'
लेकिन यह चल पाएंगे script.sh
में स्थित $HOME/somedir
के साथ वर्तमान कार्यशील निर्देशिका के रूप में निर्देशिका।
वर्किंग डायरेक्टरी को बदले बिना दूसरी जगह स्थित स्क्रिप्ट को निष्पादित करने का दूसरा तरीका स्क्रिप्ट के स्थान को अपने PATH
पर्यावरण चर, उदाहरण के लिए जोड़ना है
PATH="$PATH:$HOME/somedir"
अब script.sh
में $HOME/somedir
बस का उपयोग करके कहीं से भी चलाने के लिए सक्षम हो जाएगा
$ script.sh
फिर से, यह कमांड के लिए कार्यशील निर्देशिका को नहीं बदलता है।
cdrun () ( cd "$1" && shift && command "$@" )
:।