2011-09-09 11 views
7

मैं पार्टी से एक ग्रूवी स्क्रिप्ट फ़ाइल को कार्यान्वित करने की जरूरत है, और मैं स्क्रिप्ट की जरूरत निर्देशिका यह में मौजूद है की एक कार्यशील निर्देशिका के लिएमैं निर्देशिका की एक कार्यशील निर्देशिका के साथ एक मनमानी स्क्रिप्ट कैसे निष्पादित करूं?

यही है, मेरी bash लिपि में, मैं यह कर रहा हूँ:।

/opt/script/myscript.groovy & 

लेकिन यह निर्देशिका निर्देशिका को /etc/init.d पर सेट करने के लिए प्रतीत होता है, जिस निर्देशिका से मैं कॉल कर रहा हूं। मैं उस स्क्रिप्ट के लिए कार्य निर्देशिका को /opt/script पर कैसे बदलूं?

+0

जवाब न किसी रूप में यहाँ है या दूसरा: http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in – Chris

+0

@Chris: इसे छोड़कर नहीं। मनमानी लिपि का तात्पर्य है * बैश नहीं *। बैश विशिष्ट उत्तरों को कम किया जाएगा। –

उत्तर

7

/etc/init.d

शायद

आप (प्रारंभ में) कि /etc/init.d से स्क्रिप्ट runnig रहे हैं?

स्क्रिप्ट की पहली पंक्ति में cd /opt/script जोड़े

या

... यह गतिशील रखने के लिए, जोड़ें: cd "$(dirname "$0")"

+0

काफी आसान है। बाकी लिपि से पहले सीडी करना ठीक काम करता है। –

1

कुछ इस तरह हो सकता है:

SCRIPT=/opt/script/myscript.groovy 
pushd `dirname $SCRIPT` 
./`basename $SCRIPT` 
popd 
+1

डीओएसबीएटी फ़ाइल को छोड़कर किसी भी पर्यावरण में 'popd' आवश्यक नहीं है; निर्देशिका को बदलने के लिए क्या प्रक्रिया है जो इसे चलाने वाले प्रोग्राम की निर्देशिका को प्रभावित नहीं कर सकती है। –

2

bash में यह है कि स्क्रिप्ट में सबसे अच्छा काम करता है:

HERE=$(cd -- $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) 
cd -- "$HERE" 

यह भी (/path/to/script.sh का) निम्नलिखित मंगलाचरण के साथ सफल होगा:

PATH="/path/to:$PATH" bash script.sh 

जहां HERE=$(dirname $0) विफल हो जाएगा।

वैकल्पिक रूप से आप के बजाय सिर्फ pwd, तो $HEREman 3 realpath के रूप में realpath (canonicalized पूर्ण पथ नाम) शामिल होंगे की pwd -P इस्तेमाल कर सकते हैं।

15

आप अपने /etc/init.d स्क्रिप्ट के अंदर शुरू रोकने के डेमॉन का उपयोग कर रहे हैं, तो आप लाभ -d पैरामीटर के इस प्राप्त करने के लिए ले जा सकते हैं:

-d, --chdir path 
      Chdir to path before starting the process. This is done after the chroot if the -r|--chroot option is set. When not specified, start-stop-daemon will chdir to the root directory before starting the process. 
संबंधित मुद्दे