2012-03-15 19 views
24

गूंज खोल स्क्रिप्ट है कि मैं क्रियान्वित कर रहा हूँ के बाद के बाद एक ही लाइन पर पढ़शैल स्क्रिप्ट, संदेश

#!/bin/sh 

echo "Enter [y/n] : " 
read opt 

इसका उत्पादन होता है

Enter [y/n] : 
Y 

मैं चाहता हूँ कि चर एक ही पर पढ़ा जाना चाहिए नीचे

Enter [y/n] : Y 

मुझे लगता है कि सरल होना चाहिए, लेकिन मैं स्क्रिप्टिंग को बाश करने के लिए नया हूं।

+0

@Aaron स्वरूपण के लिए धन्यवाद पद। यह मेरी पहली पोस्ट थी। मैं सुनिश्चित करता हूं कि मेरी अन्य पोस्ट अच्छी तरह से स्वरूपित हों। – user1263746

+0

आपका स्वागत है :-) –

उत्तर

26

कुटिया #!/bin/sh मतलब है कि आप के लिए या तो के रूप में द्वारा परिभाषित कोड लिख रहे हैं ऐतिहासिक बॉर्न शैल (अभी भी सोलारिस की तरह कुछ सिस्टम मुझे लगता है कि पर पाया), या अधिक होने की संभावना, मानक खोल भाषा POSIX। इसका मतलब है कि read -p और echo -n दोनों अविश्वसनीय हैं।

मानक/पोर्टेबल समाधान है:

printf 'Enter [y/n] : ' 
read -r opt 

(-r\ की विशेष उपचार रोकता है, के बाद से read सामान्य रूप से स्वीकार करता है कि एक लाइन निरंतरता जब यह एक पंक्ति के अंत में के रूप में।)

यदि आप जानते हैं कि आपकी स्क्रिप्ट बैश वाले सिस्टम पर चल जाएगी, तो आप शेबैंग को #!/bin/bash (या #!/usr/bin/env bash) में बदल सकते हैं और सभी फैंसी बैश सुविधाओं का उपयोग कर सकते हैं। (कई प्रणालियों /bin/shbash सांकेतिक रूप से लिंक है तो यह किसी भी तरह से काम करता है, लेकिन यह है कि पर निर्भर बुरा व्यवहार है, और जब नाम sh के तहत निष्पादित bash वास्तव में अपनी ही सुविधाओं में से कुछ अक्षम करता है।)

+1

यह एक महान और बहुत स्पष्ट स्पष्टीकरण है। मैं आरएचईएल 5.5 बीटीडब्ल्यू पर हूं। – user1263746

29

समाधान: read -p "Enter [y/n] : " opt

help read से:

-p prompt output the string PROMPT without a trailing newline before 
     attempting to read 
+0

पूरी तरह से काम करता है। -पी स्विच के बारे में स्पष्टीकरण के लिए धन्यवाद। – user1263746

6
echo -n "Enter [y/n] : " ; read opt 

या! (बाद में बेहतर है)

read -p "[y/n]: " opt 
+0

महान काम करता है, धन्यवाद! – user1263746

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