2013-02-05 13 views
7

क्या बैश स्क्रिप्ट के अंदर टिप्पणियों में चर का विस्तार करना संभव है?टिप्पणियों में परिवर्तनीय विस्तार

मैं SGE में फ़ीड करने के लिए एक स्क्रिप्ट लिखना चाहता हूं। qsub वाक्यविन्यास मुझे #$ से शुरू होने वाली बैश स्क्रिप्ट के अंदर लाइनों का उपयोग करके ग्रिड इंजन को अतिरिक्त पैरामीटर पास करने की अनुमति देता है। उदाहरण के लिए,

#$ -q all.q 
#$ -S /bin/bash 
#$ -V 
#$ -m beas 
#$ -o run_20120103.out 

कि -o पैरामीटर गतिशील रूप से एक चर के लिए निर्धारित है क्या मैं चाहता हूँ, $1 का कहना है। इसलिए मैं भोलेपन से

#$ -o run_${1}.out 

हालांकि लिखते थे, के बाद से लाइन एक # साथ शुरू होता है, बैश यह ध्यान नहीं देता और चर $1 का विस्तार नहीं है।

कोई विचार? कुछ बैश प्रीप्रोसेसर? कुछ और रास्ता?

EDIT मैंने अभी उदाहरण के रूप में $1 चुना है। यह $FOO या $BAR भी हो सकता है।

+0

क्या $ का मूल्य {1 का निर्धारण किया जाता है: उदाहरण के लिए, अगर मैं बजाय paretheses बिना कर

#$ -o run_${TASK_ID}.out 

लिखें यह चाल करना होगा की, लिपि में TASK_ID शामिल करना चाहते हैं }? क्या आप क्लस्टर/ग्रिड पर विभिन्न नौकरियों को लोड करने के लिए चक्र के लिए कर रहे हैं? –

+0

हाँ, यही वह है। –

+2

उस स्थिति में आप qsub में खिलाए गए स्क्रिप्ट के अंदर # $ -o डालने के बजाय अपने लूप के अंदर विकल्प के साथ qsub को आसानी से कॉल कर सकते हैं। –

उत्तर

4

शैल मेमोरी में परिवर्तनीय विस्तार होता है, यह फ़ाइल को प्रभावित नहीं करता है। इसलिए, इससे कोई फर्क नहीं पड़ता कि बैश फैलता है।

cat << EOF | qsub [options] - 
#$ -o run_$1.out 
cmds 
EOF 
+0

क्या आप समझ सकते हैं कि यह स्क्रिप्ट चरण-दर-चरण क्या करती है? मैंने इसका परीक्षण करने की कोशिश की लेकिन मुझे नहीं पता कि व्यवहार क्या होना चाहिए और मुझे व्यवहार नहीं मिल रहा है, मुझे उम्मीद है कि यह काफी बेकार है – Gullydwarf

+0

@ गुलिलीद्वार यह स्क्रिप्ट एक पूर्ण या आत्मनिर्भर उदाहरण नहीं है।यह केवल qsub को खिलाने से पहले पाठ में चर का विस्तार करने के लिए एक वाक्य रचनात्मक संरचना को दर्शाता है। –

+0

क्या आप इसे विस्तारित कर सकते हैं? मुझे लगता है कि यह मेरी नौकरियों के लिए एक परिवर्तनीय दीवार का विस्तार करने के लिए देख रहा है। Qsub में दीवार के समय के लिए कोई विकल्प नहीं है? इससे यह बहुत आसान हो जाएगा: पी संपादित करें: मुझे लगता है कि मुझे यह पता चला है, -एल को qsub के विकल्प के रूप में भी इस्तेमाल किया जा सकता है, जहां मुझे लगता है कि मैं दीवार के समय को पार कर सकता हूं। अब परीक्षण कर रहे हैं – Gullydwarf

0

, थोड़ा और स्वीकार किए जाते हैं जवाब से विशिष्ट SGE होना करने के लिए बस के मानक उत्पादन अनुप्रेषित:

इसके बजाय, आप शायद सब कुछ जगह में विस्तार के साथ, मक्खी पर चलाने के लिए स्क्रिप्ट उत्पन्न कर सकते हैं qsub और जॉब आईडी पार्स करें। इसके बाद आप qalter के माध्यम से नौकरी के नाम को बदलने के लिए इसका उपयोग कर सकते हैं।

यहां एक ऐसी स्क्रिप्ट का नमूना है जिसका उपयोग मैंने इस तरह की नौकरियां जमा करने और संशोधित करने के लिए किया था।

for a in $args; 
do 
    qsub submission_script $a 1> job.txt 
    jid=$(cat job.txt | tr -dc '0-9' | cut -c -6) 
    qalter $jid -N $a 
done 

मुझे यकीन है कि ऐसा करने के लिए और अधिक मूर्ख तरीके हैं, लेकिन यह पहला कदम है।

यह दृष्टिकोण submission_script को अपने स्वयं के तर्क रखने की अनुमति देता है। यह आपको प्रोग्राम की रूप से अन्य नौकरी विशेषताओं को बदलने की अनुमति देता है, केवल नाम ही नहीं।

-2

मैं विभिन्न आउटपुट या त्रुटि लॉग उत्पन्न करने के लिए एसजीई में qsub कमांड का भी उपयोग कर रहा हूं।

#$ -o run_$TASK_ID.out 
+0

नहीं, यह चाल नहीं करता है। आपको run_ $ TASK_ID.out नामक फ़ाइल मिलती है, चर को इसके मान से प्रतिस्थापित नहीं किया जाता है – matthieu

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