2010-09-27 13 views
51

क्या बैश स्क्रिप्ट स्वचालित रूप से संकेतों को संभालती है जो आम तौर पर उपयोगकर्ता को डिफ़ॉल्ट कार्रवाइयों के साथ प्रस्तुत की जाती है? वर्तमान में मैं एक इन-हाउस टूल को कॉल करने के लिए एक बैश स्क्रिप्ट का उपयोग कर रहा हूं जो क्रियाओं को पूरा करने के लिए उपयोगकर्ता को संकेत देता है (वाई/एन के लिए संकेत), हालांकि जिस स्क्रिप्ट को मैं लिख रहा हूं वह पूरी तरह से "हैंड-ऑफ" होना चाहिए, इसलिए प्रोग्राम को निष्पादन जारी रखने की अनुमति देने के लिए मुझे Y|N भेजने के लिए एक तरीका चाहिए। क्या यह संभव है?बैश स्क्रिप्ट उत्तर इंटरैक्टिव संकेत

+0

यह "स्वत: पूर्णता" नहीं है ... जैसे @unwind कहते हैं, यह "स्वचालन" है – benzaita

+1

ऐसा करने के लिए 'yes' का उपयोग करने का उदाहरण: http://unix.stackexchange.com/questions/47344/the-yes- कमांड # comment65866_47344 – Droogans

उत्तर

39

यह "स्वत: पूर्णता" नहीं है, यह स्वचालन है। इन चीजों के लिए एक आम उपकरण Expect कहा जाता है।

आप yes से केवल पाइपिंग इनपुट से भी दूर हो सकते हैं।

+1

दुर्भाग्य से मैं उम्मीद का उपयोग नहीं कर सकता क्योंकि यह सिस्टम चलाने पर कड़े स्थान की आवश्यकता है इसलिए मैं अतिरिक्त पैकेज नहीं जोड़ सकता, लेकिन चाल में 'हाँ' पाइपिंग, सौभाग्य से सभी संकेतों को केवल 'y' वैसे भी। धन्यवाद। – tj111

+0

हालांकि 'हां | कमांड 'हमेशा काम नहीं कर सकता है। अगर यह सिर्फ इंस्टॉलेशन उद्देश्य के लिए है तो मैं '-y' का उपयोग करके गिर गया एक बेहतर और पसंदीदा विकल्प है। –

96

एक साधारण

echo "Y Y N N Y N Y Y N" | ./your_script 

यह आपको "Y" या अपनी स्क्रिप्ट को "एन" के किसी भी क्रम पारित करने के लिए अनुमति देते हैं।

+0

अगर मुझे कोई 'एन' भेजने की ज़रूरत है, तो मैंने इस विधि का उपयोग किया होगा, लेकिन मुझे केवल वाई की जरूरत है इसलिए मैं 'हाँ' के साथ गया। बहुत बुरा मैं दो उत्तरों को स्वीकार नहीं कर सकता, क्योंकि वे दोनों सही हैं। – tj111

+2

;) यदि आपको कभी भी कुछ 'एन' भेजने की ज़रूरत है तो अब आपके पास ऐसा करने का एक अच्छा तरीका है। –

+0

यह कामकाज मेरे आलसी सीएलआई व्यवहार के लिए शानदार है। धन्यवाद! – mbb

9

मुझे इनपुट भेजने का सबसे अच्छा तरीका मिला है जो आपको आवश्यक इनपुट के साथ पास करने के लिए बिल्ली और एक टेक्स्ट फ़ाइल का उपयोग करना है।

cat "input.txt" | ./Script.sh 
7

आप केवल है, तो Y भेजने के लिए:

$> yes Y |./your_script 

आप केवल है, तो भेजने के लिए न:

$> yes N |./yout_script 
4

मेरी स्थिति में मैं Y या N बिना कुछ सवालों के जवाब देने की जरूरत लेकिन पाठ या खाली के साथ। मुझे अपनी स्थिति में ऐसा करने का सबसे अच्छा तरीका एक शेलस्क्रिप्ट फ़ाइल बनाना था। मेरे मामले में मैंने इसे autocomplete.sh

मुझे एक सिद्धांत स्कीमा निर्यातक के लिए कुछ प्रश्नों के उत्तर देने की आवश्यकता थी, इसलिए मेरी फ़ाइल इस तरह दिखाई दे रही थी।

-

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF 
`#Export to Doctrine Annotation Format`          1 
`#Would you like to change the setup configuration before exporting`  y 
`#Log to console`               y 
`#Log file`                 testing.log 
`#Filename [%entity%.%extension%]` 
`#Indentation [4]` 
`#Use tabs [no]` 
`#Eol delimeter (win, unix) [win]` 
`#Backup existing file [yes]` 
`#Add generator info as comment [yes]` 
`#Skip plural name checking [no]` 
`#Use logged storage [no]` 
`#Sort tables and views [yes]` 
`#Export only table categorized []` 
`#Enhance many to many detection [yes]` 
`#Skip many to many tables [yes]` 
`#Bundle namespace []` 
`#Entity namespace []` 
`#Repository namespace []` 
`#Use automatic repository [yes]` 
`#Skip column with relation [no]` 
`#Related var name format [%name%%related%]` 
`#Nullable attribute (auto, always) [auto]` 
`#Generated value strategy (auto, identity, sequence, table, none) [auto]` 
`#Default cascade (persist, remove, detach, merge, all, refresh,) [no]` 
`#Use annotation prefix [ORM\]` 
`#Skip getter and setter [no]` 
`#Generate entity serialization [yes]` 
`#Generate extendable entity [no]`           y 
`#Quote identifier strategy (auto, always, none) [auto]` 
`#Extends class []` 
`#Property typehint [no]` 
EOF 

बात मैं इस रणनीति आप टिप्पणी कर सकते हैं है कि आपके जवाब हैं और EOF एक रिक्त पंक्ति का उपयोग कर के बारे में की तरह सिर्फ इतना है कि (डिफ़ॉल्ट जवाब है - यह एक उदाहरण केवल है)। इन निर्यातकों के उपकरण के जवाब देने के लिए इस निर्यातक उपकरण के अपने JSON समकक्ष के रास्ते से बाहर निकलता है, लेकिन मुझे लगा कि मैंने ऐसा करने के बाद बाहर किया है)।

स्क्रिप्ट को चलाने के लिए बस अपनी इच्छित निर्देशिका में रहें और टर्मिनल में 'sh autocomplete.sh' चलाएं।

संक्षेप में वापसी लाइन्स के साथ संयोजन में < < EOL & EOFका उपयोग कर आप आवश्यक के रूप में शीघ्र से प्रत्येक सवाल का जवाब कर सकते हैं द्वारा। प्रत्येक नई लाइन एक नया उत्तर है।

मेरा उदाहरण दिखाता है कि यह 'चरित्र का उपयोग करके टिप्पणियों के साथ कैसे किया जा सकता है ताकि आपको याद रखें कि प्रत्येक चरण क्या है।

ध्यान दें कि इस विधि का अन्य लाभ यह है कि आप अधिक वाई या एन के साथ उत्तर दे सकते हैं ... वास्तव में आप रिक्त स्थान के साथ जवाब दे सकते हैं!

उम्मीद है कि यह किसी की मदद करेगा।

+1

कृपया मुझे बताएं कि डाउनवोट क्यों, यह पता लगाने में काफी समय लगा कि यह जवाब था (और केवल मेरे मामले में जवाब था)। मैंने इसे समुदाय के साथ साझा करने के लिए यहां रखा और सवाल पूछने वाले को लक्ष्य पर मृत होना चाहिए। "क्या बैश स्क्रिप्ट स्वचालित रूप से उन संकेतों को संभालती है जो आम तौर पर उपयोगकर्ता को डिफ़ॉल्ट क्रियाओं के साथ प्रस्तुत की जाती हैं?", हाँ जो मैंने ऊपर दिया है उसका उपयोग करने का एक तरीका है। –

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