2014-04-12 6 views
5

से मार डाला गया था में -p पढ़ का उपयोग कर रहा पहले से क्षमा चाहते हैं - मैं पूरी तरह से मैं क्या काफी अच्छी तरह से पूछ रहा हूँ के पीछे एक विचार समझ में नहीं आता समझने के लिए क्यों यह काम नहीं कर रहा (मैं नहीं जानता मुझे सीखने की आवश्यकता है)। मैंने पहले जवाबों के लिए स्टैक एक्सचेंज की खोज की - मुझे कुछ जानकारी मिली जो संभवतः प्रासंगिक लगती थी, लेकिन अवधारणाओं को पर्याप्त रूप से समझा नहीं था कि मुझे समझ में आया कि एक समाधान समाधान कैसे बनाया जाए। मैं Google को खराब कर रहा हूं लेकिन मुझे कोई जानकारी नहीं मिली है जो बताती है कि इस तरह से क्या चल रहा है। पृष्ठभूमि अवधारणाओं के लिए कोई भी दिशा जो मुझे समझने में मदद कर सकती है कि क्या हो रहा है, इसकी सराहना की जाएगी।एक bash स्क्रिप्ट कि पाइप

यह एक bash स्क्रिप्ट है कि एक पाइप से मार डाला गया था में उपयोगकर्ता इनपुट प्राप्त करने के लिए संभव है?

उदाहरण के लिए:

wget -q -O - http://myscript.sh | bash 

और लिपि में:

read -p "Do some action (y/n): " __response 
if [[ "$__response" =~ ^[Yy]$ ]]; then 
    echo "Performing some action ..." 
fi 

मैं यह समझ के रूप में, इस वजह से stdin से इनपुट और बैश स्क्रिप्ट पढ़ने के लिए प्रयास पढ़ काम नहीं करता है वर्तमान में "उस पाइप के माध्यम से निष्पादित" है (मुझे यकीन है कि क्या हो रहा है इसका वर्णन करने के लिए एक और तकनीकी सटीक तरीका है, लेकिन मुझे नहीं पता कि कैसे)।

read -t 1 __response </dev/tty 

बहरहाल, यह या तो काम नहीं करता:

मैं एक समाधान है कि उपयोग करने की सिफारिश नहीं मिली।

किसी भी प्रकाश अवधारणाओं मैं इस काम, या क्यों यह काम नहीं कर रहा या समाधान बहुत सराहना की जाएगी के स्पष्टीकरण बनाने के लिए समझने की जरूरत है पर बहाया।

उत्तर

3

tty समाधान काम करता है। इस कोड के साथ यह परीक्षण करें, उदाहरण के लिए: तिथि गूंज या नहीं करने के लिए निर्णय लेने से पहले एक प्रतिक्रिया के लिए

$ date | { read -p "Echo date? " r </dev/tty ; [ "$r" = "y" ] && cat || echo OK ; } 
Echo date? y 
Sat Apr 12 10:51:16 PDT 2014 
$ date | { read -p "Echo date? " r </dev/tty ; [ "$r" = "y" ] && cat || echo OK ; } 
Echo date? n 
OK 

read से शीघ्र टर्मिनल पर दिखाई देता है और read प्रतीक्षा करता है।

क्या मैं ऊपर लिखा दो महत्वपूर्ण पहलुओं में नीचे लाइन से अलग है:

read -t 1 __response </dev/tty 

पहले, विकल्प -t 1read एक दूसरे के एक समय समाप्ति देता है। दूसरा, यह आदेश एक संकेत प्रदान नहीं करता है। इन दो के संयोजन शायद इसका मतलब है कि, भले ही read था संक्षिप्त इनपुट के लिए पूछ रहा है, आप इसे नहीं जानता था।

+0

धन्यवाद। अच्छी तरह से काम। – nfarrar