2008-12-30 5 views
11

मेरे पास एक स्क्रिप्ट है जो एक एप्लिकेशन को कॉल करती है जिसके लिए उपयोगकर्ता इनपुट की आवश्यकता होती है, उदा। ऐप चलाएं जिसके लिए उपयोगकर्ता को 'वाई' या 'एन' टाइप करना होगा।
मैं शैल स्क्रिप्ट कैसे प्राप्त कर सकता हूं कि उपयोगकर्ता को इनपुट के लिए न पूछें, बल्कि स्क्रिप्ट में पूर्वनिर्धारित चर से मान का उपयोग करें?शेल स्क्रिप्ट के भीतर से इनपुट

मेरे मामले में इनपुट के लिए दो प्रश्न होंगे।

उत्तर

14

आप जो भी टेक्स्ट स्टडीन पर चाहते हैं उसमें पाइप कर सकते हैं और यह वही होगा जैसा उपयोगकर्ता इसे स्वयं टाइप करता है। टाइपिंग "Y" का अनुकरण करने के लिए उदाहरण के लिए बस का उपयोग करें:

echo "Y" | myapp 

या एक खोल चर का उपयोग कर:

echo $ANSWER | myapp 

भी एक यूनिक्स कमांड कहा जाता है "हाँ" की एक सतत स्ट्रीम आउटपुट "y" उन ऐप्स के लिए जो बहुत सारे प्रश्न पूछते हैं जिन्हें आप सकारात्मक में जवाब देना चाहते हैं।

+0

गूंज जो मुझे चाहिए लेकिन एकाधिक पैरामीटर के साथ ... –

+3

उस स्थिति में, गूंज के बजाय "printf" कमांड का उपयोग करने का प्रयास करें, और स्ट्रिंग में न्यूलाइन शामिल करें। तो यदि आप "वाई" का जवाब देना चाहते हैं तो "एन" उपयोग करें: printf "वाई \ nN \ n" | myapp –

2

अधिक जटिल स्थितियों के लिए उम्मीद कमांड, आपके सिस्टम में यह होना चाहिए। मैंने इसे बहुत ज्यादा इस्तेमाल नहीं किया है, लेकिन मुझे लगता है कि आप जो खोज रहे हैं उसे संदेह है।

$ man expect 

http://oreilly.com/catalog/expect/chapter/ch03.html

+0

ऐसा लगता है कि 'उम्मीद' नहीं है - HPUX11 –

+0

पर चल रहा है इसे इंस्टॉल करें। उम्मीद एक अमूल्य उपकरण है। मल्टीलाइन समाधान के लिए – PEZ

2

एप्लिकेशन (के रूप में से/dev/tty करने का विरोध किया है, उदा passwd कार्यक्रम करता है) stdin से पढ़ता है, तो बहु इनपुट यहां-दस्तावेज़ के लिए एकदम सही उम्मीदवार है।

#!/bin/sh 

the_app [app options here] <<EOF 
Yes 
No 
Maybe 
Do it with $SHELL 
Quit 
EOF 

जैसा कि आप देख सकते हैं, यहां दस्तावेज़ भी पैरामीटर प्रतिस्थापन की अनुमति देते हैं। यदि आप यह नहीं चाहते हैं, तो <<'EOF' का उपयोग करें।

+1

उपरोक्त – Pankrates

0

मैं इस तरह से पसंद करते हैं: यदि आप एक से अधिक आदानों चाहता ... तुम इतनी के रूप में कई गूंज बयान में डाल:

{ echo Y; Y; } | sh install.sh >> install.out 

ऊपर के उदाहरण में ... मैं install.sh में दो आदानों खिला रहा हूँ स्क्रिप्ट। फिर ... अंत में, मैं स्क्रिप्ट आउटपुट को लॉग फ़ाइल में संग्रहीत करने और बाद में देखने के लिए पाइप कर रहा हूं।