2014-06-24 4 views
5

में तर्क पास करना मेरे पास एक टीसीएल स्क्रिप्ट है जिसमें तर्क के रूप में परिभाषित कई पैरामीटर हैं। मैं एक नौकरी फ़ाइल बनाने का इरादा रखता हूं जहां मैं मैन्युअल हस्तक्षेप के बिना पैरामीटर के विभिन्न संयोजनों के साथ .tcl स्क्रिप्ट निष्पादित कर सकता हूं।कमांड लाइन से एक टीसीएल स्क्रिप्ट

क्या मेरा मतलब है निम्नलिखित:

नौकरी फ़ाइल (run.sh):

./main.tcl arg1 arg2 arg3 arg4 
./main.tcl arg1 arg3 arg5 

अब मैं प्रत्येक उल्लेख रन के लिए कमांड लाइन तर्क सरणी "argv" पारित करने में सक्षम होना चाहता हूँ run.tsh में main.tcl स्क्रिप्ट में सरणी के रूप में ताकि विकल्पों को निष्पादन से पहले स्क्रिप्ट के अनुसार सेट किया गया हो।

क्या .sh स्क्रिप्ट और .tcl स्क्रिप्ट को जोड़ने का कोई तरीका है?

+0

अपनी खोल स्क्रिप्ट के अंदर आप सभी तर्कों की सूची $ @ के रूप में देख सकते हैं। तो बस 'main.tcl $ @ ' –

+0

@ जोहान सी - उत्तर के लिए धन्यवाद! ठीक है, तो अगर मैं अपने run.sh के अंदर ./main.tcl $ @ करता हूं, तो मैं main.tcl के अंदर तर्क कैसे प्राप्त कर सकता हूं? argv का उपयोग कर? – pypep278

+0

मुझे लगता है कि नीचे दिया गया जवाब आपके लिए शामिल है। –

उत्तर

6

प्रति online document here:

तरीका है जिसके द्वारा संख्या में पारित किया जा सकता है, और एक स्क्रिप्ट के द्वारा प्रयोग किया, इस प्रकार है।

argc argv argv0

सभी Tcl लिपियों तीन पूर्वनिर्धारित वैरिएबल की पहुंच है। $ argc - एक स्क्रिप्ट को पारित तर्कों की संख्या आइटम। $ argv - तर्कों की सूची। $ argv0 - स्क्रिप्ट का नाम।

तर्कों का उपयोग करने के लिए, स्क्रिप्ट को निम्नानुसार फिर से लिखा जा सकता है।

if { $argc != 2 } { 
    puts "The add.tcl script requires two numbers to be inputed." 
    puts "For example, tclsh add.tcl 2 5". 
    puts "Please try again." 
} else { 
    puts [expr [lindex $argv 0] + [lindex $argv 1]] 
    } 
+0

यह लिंक अब मर चुका है। – Brian

+0

ध्यान दें कि इस तरह लिखा गया है, यह कमांड इंजेक्शन भेद्यता की मात्रा है, 'tclsh that-script' के साथ प्रयास करें [exec sh -c {id>/dev/tty; उदाहरण के लिए echo 1}] '2'। 'रखता है [expr {[lindex $ argv 0] + [lindex $ argv 1]}] के साथ बेहतर। –

0

ऊपर जवाब के अलावा, मैंने पाया उपयोगी निम्नलिखित: http://www.alteraforum.com/forum/showthread.php?t=3034

आमतौर पर हम चला सकते हैं:

QuestaSim/ModelSim/Quartus के भीतर चल रहे के लिए मैं निम्नलिखित संसाधन का पालन किया। source कमांड के साथ टीसीएल स्क्रिप्ट्स, लेकिन यह मूल रूप से बेस .tcl स्क्रिप्ट्स जैसे तर्कों को संसाधित नहीं करता है। तो एक प्रक्रिया का उपयोग करके, आप एक ही चीज़ प्राप्त कर सकते हैं।

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