बैश स्क्रिप्ट उत्तर इंटरएक्टिव संकेत देता है [डुप्लिकेट]


109

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


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

3
yesऐसा करने के लिए उपयोग करने का उदाहरण : unix.stackexchange.com/questions/47344/…
Droogans

जवाबों:


65

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

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


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

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

169

एक सरल

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

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


3
यदि मुझे कोई भेजने की आवश्यकता होती है N, तो मैं इस विधि का उपयोग करता, लेकिन मुझे केवल Y की आवश्यकता थी इसलिए मैं साथ गया yes। बहुत बुरा मैं दो उत्तर स्वीकार नहीं कर सकता, क्योंकि वे दोनों सही हैं।
TJ L

3
;) यदि आपको कभी कुछ भेजने की आवश्यकता है, तो आपके Nपास इसे करने का एक अच्छा तरीका है।
Loïc Février

2
यह मेरे लिए काम नहीं करता है; रिक्त स्थान को नई पंक्तियों के रूप में नहीं गिना जाता है --- यदि उदाहरण के लिए मैं "Y N" को प्रतिध्वनित करता हूं तो यह स्ट्रिंग "Y N"को पहले प्रॉम्प्ट के रूप में देता है और इसे पूरा करने के लिए दूसरे प्रांप्ट पर लटकाता है। मैंने रिक्त स्थान को नई-नई स्थितियों में बदलने की कोशिश की, लेकिन यह काम नहीं किया, फिर भी संकेत देने के लिए शाब्दिक स्ट्रिंग दिया।
temporary_user_name

52
प्रयोग करके देखें printf 'y\ny\ny\n' | ./your_script। इस तरह से आप मैन्युअल रूप से प्रत्येक अपेक्षित प्रविष्टि के लिए नई रूपरेखा सम्मिलित कर रहे हैं।
माजिद

8
printf '%s\n' Y Y N N Y N Y Y Nआइटमों के बीच नई सुर्खियाँ डालता है, लेकिन एक बड़े प्रारूप स्ट्रिंग की आवश्यकता के बिना।
चार्ल्स डफी

16

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

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

उम्मीद ने मेरे लिए उम्मीद के मुताबिक काम नहीं किया। यह इस सवाल का सबसे सरल और सबसे अच्छा जवाब है।
क्लाउडएक्सिक्स

12

यदि आपके पास केवल Y भेजना है:

$> yes Y |./your_script

यदि आपके पास भेजने के लिए केवल N है:

$> yes N |./your_script

9

मेरी स्थिति में मुझे वाई या एन के बिना कुछ सवालों के जवाब देने की जरूरत थी, लेकिन पाठ या रिक्त के साथ। मुझे अपनी स्थिति में ऐसा करने का सबसे अच्छा तरीका मिला एक शेलस्क्रिप्ट फ़ाइल बनाना। मेरे मामले में मैंने इसे 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

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

स्क्रिप्ट को चलाने के लिए बस उस निर्देशिका में रहें जिसे आप चाहते हैं और 'sh autocomplete.sh'टर्मिनल में चलाएं ।

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

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

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

आशा है कि यह किसी को मदद करता है।


4

इसके लिए एक विशेष बिल्ड-इन उपयोग है - ' हां '।

एक ही उत्तर के साथ सभी प्रश्नों का उत्तर देने के लिए, आप दौड़ सकते हैं

yes [answer] |./your_script

या आप इसे अपनी स्क्रिप्ट के अंदर रख सकते हैं प्रत्येक प्रश्न का विशिष्ट उत्तर है


मैं स्क्रिप्ट के अंदर ऐसा कैसे कर सकता हूं? मेरा मतलब है कि प्रत्येक प्रश्न के लिए अलग-अलग उत्तर निर्दिष्ट करें
सेंगो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.