मैं अपने आप को bash स्क्रिप्ट में y का उत्तर कैसे दूं?


16

मैं कुछ प्रोग्राम को बैश स्क्रिप्ट के माध्यम से अनइंस्टॉल करना चाहता हूं। कमांड चलाने के बाद, टर्मिनल मुझसे पूछ रहा है कि क्या मुझे यकीन है कि मैं इसे अनइंस्टॉल करना चाहता हूं। इसलिए मुझे जवाब देने की जरूरत है y। मैं इसे स्वचालित रूप से करना चाहता हूं और y10 सेकंड की देरी के बाद जवाब देना चाहता हूं ।

मैंने यह उदाहरण दिया है लेकिन यह काम नहीं कर रहा है -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

कोई उपाय? सेंटोस 7.2


6
ITYM, के #! /bin/bash -बजाय#!/usr/bin
स्टीफन Chazelas 7

जाँचें कि क्या uninstallकार्यक्रम मापदंडों या एक विन्यास स्क्रिप्ट को स्वीकार करता है या नहीं। यह इस तरह से आसान होगा
phuclv

1
पूरे वेब पर विज्ञापन के बारे में पूछा और उत्तर दिया । " यह काम नहीं कर रहा है" समस्या का अच्छा विवरण नहीं है। शायद आप यह बता सकते हैं कि आपकी समस्या अनगिनत अन्य लोगों से अलग कैसे है।

2
आपकी स्क्रिप्ट वास्तव में क्या करती है: uninstallइसे चलाने के लिए और बाहर निकलने के लिए प्रतीक्षा करें। फिर 10 सेकंड सोएं। फिर स्टैडआउट के y\nलिए प्रतिध्वनि (जो अभी भी टर्मिनल से जुड़ी हुई है, किसी भी कार्यक्रम के स्टैडिन के लिए नहीं)
पीटर कॉर्डेस

जवाबों:


50

यही yesआज्ञा है। यह yप्रति पंक्ति एक बार अनिश्चित काल के लिए आउटपुट करता है इसलिए इसे कमांड्स के लिए पाइप किया जा सकता है जो हां / ना प्रश्न पूछते हैं।

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

जो yसभी सवालों के जवाब देता है। nसभी सवालों के जवाब के लिए, के yesसाथ बदलें yes n। की एक पूर्वनिर्धारित तालमेल बिठाने के लिए yऔर n, आप बदल सकते हैं yesके साथ:

printf '%s\n' y n n y y n...

या इसे इस प्रकार चलाएं:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

यदि आपको 10 सेकंड से पहले पढ़ने के लिए उपलब्ध उत्तर की आवश्यकता नहीं है, तो आप करेंगे:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

लेकिन यह संभवतः आवश्यक नहीं होगा, जब हम yपाइप को लिखते हैं , तो इसे uninstallपढ़ने के लिए वहां जाना होगा जब भी वह इसे पढ़ना चाहता है, तो इसकी संभावना नहीं है कि आपको इसे पढ़ने के लिए तैयार होने की प्रतीक्षा करने की आवश्यकता होगी। uninstallप्रश्न पूछने से पहले इनपुट को फ्लश करने का निर्णय लेने पर अपवाद होगा ।

वे सभी मान uninstallलेते हैं कि कमांड प्रत्येक उत्तर को उसके मानक इनपुट से इनपुट की एक पंक्ति के रूप में पढ़ता है।

अधिक जटिल मामलों में, जहां आदेश tty डिवाइस से सीधे जवाब पढ़ता है या के लिए जहां चारा उत्तर देने के लिए सशर्त (क्या आदेश आउटपुट के आधार पर उदाहरण के लिए), जरूरत है कि के जहां जैसी चीजों का उपयोग करें expectया zshकी zpty

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


धन्यवाद! यह ठीक है कि हमें केवल एक प्रश्न का उत्तर देने की आवश्यकता है। उदाहरण के लिए हमें 20 सवालों के जवाब देने हैं तो क्या हुआ?
Shalev Sason

@ स्लेव, संपादित देखें।
स्टीफन चेज़लस

धन्यवाद ! इसलिए अगर मैं एक और मान दर्ज करना चाहता हूं जैसे कि अंतराल (उदाहरण के लिए) मुझे "y" के स्थान पर इसे बदलने की आवश्यकता है? Printf '% s \ n' ynnyyn 2 3 ny | / ऑप्ट / MNG / MNGVIEWHP / fe / अनइंस्टॉल
Sason

हां, यही विचार है।
स्टीफन चेजलस

3
@ShalevSason, मेरे द्वारा दिए गए सभी समाधानों में, जैसे कि echo "y", हर बार, हम लिखते हैं y<newline>, आप yद्वारा दर्ज किए गए दबाव का अनुकरण करते हुए । यदि आप Enter एंटर का अनुकरण करना चाहते हैं, तो वह एक खाली लाइन को फीड करेगा, इसलिए printf '%s\n' y n '' 2 3(जहां ''खाली लाइन है)।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.