2013-03-15 4 views
5

से एक इंटरैक्टिव बैश स्क्रिप्ट में इनपुट कैसे फ़ीड करें मेरे पास एक स्क्रिप्ट (एक विक्रेता से .. मास्किंग पासवर्ड के लिए) है जो उपयोगकर्ता इनपुट की एक श्रृंखला के माध्यम से चलता है, और इनपुट के आधार पर कुछ आउटपुट उत्पन्न करता है। मैं इसके चारों ओर एक और स्क्रिप्ट लपेटने में सक्षम होना चाहता हूं जो टेक्स्ट फ़ाइल से इनपुट को खिलाता है, और उसके बाद आउटपुट को बाद में उपयोग के लिए कैप्चर करता है। किसी के पास इसका कोई उदाहरण है?एक टेक्स्ट फ़ाइल

अपडेट: मैंने कुछ खुदाई की है, और यह पता चला है कि शैल स्क्रिप्ट एक जावा प्रक्रिया को लात मार रही है जो उपयोगकर्ता इनपुट का अनुरोध कर रही है। xargs और <,>, | इसके लिए काम नहीं लग रहा है।

+2

किसी उत्तर के लिए पर्याप्त सामग्री नहीं है, लेकिन ['expect'] (http://expect.sourceforge.net/) देखें। –

+3

क्या आपने सामान्य I/O पुनर्निर्देशन का प्रयास किया था? इस पर निर्भर करता है कि स्क्रिप्ट कैसे अपना इनपुट पढ़ती है, कभी-कभी यह काम करेगी। –

उत्तर

-1

कैसे एक खोल समारोह के बारे में

function script_plus() 
{ 
    if [ $# != 2 ]; then echo "usage: ..."; exit; fi 
    src=$1; 
    tgt=$2; 
    if [ ! -f $src ]; then echo "usage: ..."; exit; fi 
    cat $src | xargs script > $tgt 
} 

मान लिया गया 'स्क्रिप्ट' आपका विक्रेता स्क्रिप्ट है। कोई त्रुटि जांच नहीं है (केवल चित्रण के लिए)। यदि कोई शेल फ़ंक्शन नहीं है, तो ऊपर दिए गए script_plus का बॉडी शेल स्क्रिप्ट फ़ाइल की सामग्री हो सकती है।

+1

आपके पास कुछ कोड समस्याएं हैं - उदाहरण के लिए, आपके पास 'src' है जहां आपको' "$ src" की आवश्यकता है - लेकिन अधिक मौलिक रूप से, मुझे नहीं लगता कि 'script_plus FOO BAR' स्क्रिप्ट < FOO > से बेहतर है बार ', और मुझे नहीं लगता कि यह सिफारिश करने के लायक दृष्टिकोण है। – ruakh

+0

धन्यवाद, xargs के साथ तय है। निश्चित रूप से 'अनुशंसा करने लायक' परिवर्तन जब किसी को त्रुटि/तर्क जांच के साथ स्क्रिप्ट को बढ़ाने की आवश्यकता होती है। इनपुट मौजूद है, उदाहरण के लिए। – GoZoner

+0

'xargs' निश्चित रूप से ओपी की आवश्यकता नहीं है। मौजूदा स्क्रिप्ट इन चीजों को कमांड लाइन पैरामीटर के रूप में नहीं लेती है; बल्कि, यह "उपयोगकर्ता इनपुट की एक श्रृंखला के माध्यम से चलता है"। – ruakh

5

myscript <input_file> output_file (कमांड लाइन से) input_file लाइन को लाइन के आधार पर पढ़ेगा जैसे कि यह उपयोगकर्ता इनपुट था, और फिर output_file पर आउटपुट लिखें। हालांकि सावधान रहें, अगर output_file पहले से मौजूद है, तो इसे बिना किसी चेतावनी के पूरी तरह अधिलेखित किया जाएगा।

+0

'<', '>', और '|' जानने के लिए सभी अच्छे उपकरण हैं। 'स्क्रिप्ट 1 | script2' 'script1' का आउटपुट लेगा और उसे इनपुट के रूप में 'script2' में फ़ीड करेगा। – Lorkenpeist

+0

'>> 'एक और उपयोगी उपकरण है। 'myscript >> output_file' आउटपुट को 'myscript' से' output_file' के अंत तक जोड़ देगा। प्रतिक्रिया के लिए – Lorkenpeist

+0

धन्यवाद। ऊपर अपडेट देखें। यह वास्तव में एक जावा स्क्रिप्ट द्वारा एक जावा प्रक्रिया को लात मार दिया जा रहा है। अब तक इन सुझावों के साथ कोई भाग्य नहीं है। – etsauer

1

आप expect प्रोग्राम को आजमा सकते हैं जो अधिकांश लिनक्स वितरण के लिए पैकेज के रूप में उपलब्ध है। यह इंटरैक्टिव प्रोग्राम को खिलाने के लिए एक साधारण स्क्रिप्ट भाषा का उपयोग करता है। एक उदाहरण स्क्रिप्ट इस तरह हो सकता है:

#!/usr/bin/expect 
spawn passwordmanager 
expect "Enter password for testuser:" 
send "verysecret123" 

यह स्क्रिप्ट कार्यक्रम passwordmanager लांच करने के लिए expect कहते थे, तो शीघ्र Enter password for testuser: लिए प्रतीक्षा करें और verysecret123 और इतने पर के साथ जवाब।

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