2012-07-07 10 views
9

मूल रूप से एक बैश स्क्रिप्ट है जो पंक्ति में 5 कमांड निष्पादित करती है। मैं एक तर्क जोड़ना चाहता हूं जो मुझसे पूछता है "क्या आप कमांड ए निष्पादित करना चाहते हैं" और यदि मैं हाँ कहता हूं, तो आदेश निष्पादित किया जाता है, अन्यथा स्क्रिप्ट दूसरी पंक्ति पर कूद जाती है और मुझे प्रॉम्प्ट दिखाई देता है "क्या आप कमांड बी निष्पादित करना चाहते हैं" ।एक साधारण अगर/अन्य बैश स्क्रिप्ट जो उपयोगकर्ता के हां/इनपुट में प्रतिक्रिया करता है?

स्क्रिप्ट बहुत सरल है और इस

echo "Running A" 
commandA & 
sleep 2s; 
echo "done!" 

echo "Running B" 
commandB & 
sleep 2s; 
echo "done!" 
... 
+2

आप '&' का उपयोग क्यों कर रहे हैं और वहां सो रहे हैं? आपको इसे सिंक्रनाइज़ करना चाहिए ... – cha0site

+0

@ cha0site मैं कुछ बाहरी विकास उपकरण शुरू कर रहा हूं और बिना उपकरण और उपकरण केवल पहला कमांड – sandalone

उत्तर

16

उपयोग की तरह दिखता है उपयोगकर्ता से इनपुट प्राप्त करने के लिए read builtin।

read -p "Run command $foo? [yn]" answer 
if [[ $answer = y ]] ; then 
    # run the command 
fi 

एक function कि एक तर्क के रूप कमांड (और संभवतः शीघ्र) लेता है आपको लगता है कि कई बार ऐसा करने के लिए जा रहे हैं में ऊपर रखो।

+0

शुरू करेगा मैं डबल [[ब्रैकेट्स के साथ काम नहीं करता, लेकिन यह एकल [ब्रैकेट के साथ काम करता है। – sandalone

+1

यह वास्तव में '[['' के साथ काम करना चाहिए। क्या आप वाकई 'bash' का उपयोग कर रहे हैं,' #!/bin/bash' आपकी स्क्रिप्ट की पहली पंक्ति के रूप में? – Mat

+0

कोई '# नहीं है! पहली पंक्ति पर/बिन/बाश'। मुझे लगता है कि यह समस्या हो सकती है क्योंकि मैंने स्पष्ट रूप से यह कहा नहीं है कि यह बाश है। – sandalone

1

आप बैश read builtin चाहते हैं। आप इस एक पाश में उपयोग करते हुए इतना जैसी निहित उत्तर चर प्रदर्शन कर सकते हैं: यह इच्छा पाश अपने सभी आदेशों के माध्यम से

for cmd in "echo A" "echo B"; do 
    read -p "Run command $cmd? " 
    if [[ ${REPLY,,} =~ ^y ]]; then 
     eval "$cmd" 
     echo "Done!" 
    fi 
done 

, हर एक के लिए संकेत करें, और उसके बाद आदेश पर अमल केवल के पहले अक्षर को अगर उपयोगकर्ता की प्रतिक्रिया एक वाई या वाई चरित्र है। उम्मीद है की वो मदद करदे!

+0

यदि आप कर सकते हैं तो आप 'eval' से बचने का प्रयास करना चाहेंगे। एक विचार एक समारोह में प्रत्येक कमांड को समाहित करना होगा जो या तो स्वयं का वर्णन करता है या आप इसे कैसे आमंत्रित करते हैं, इस पर निर्भर करता है। – tripleee

+0

लोअरकेस पैरामीटर विस्तार '$ {,,}' को बैश 4 की आवश्यकता है और देखें [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050)। –

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