2012-02-03 16 views
8

पर एक नई पंक्ति कार्रवाई ट्रिगर के बिना पढ़ा का उपयोग कर मैं इस समय इसटर्मिनल

$PROMPT=">" 
while read -p "${PROMPT}" line; do 
    echo -en "\r" 
    some_info_printout($line) 
    echo -en "\n${PROMPT}" 
done 

जो इस

>typed input 
INFO OUT ["typed input"] 
>more text 
INFO OUT ["more text"] 
> 

तरह उत्पादन देता है मैं क्या पसंद करेंगे एक read करते हैं और न्यू लाइन कार्रवाई में इस तरह की अनदेखी करने के है कि सटीक पाठ मौजूदा लाइन

INFO OUT ["typed input"] 
INFO OUT ["more text"] 
> 

कोई भी सहायता ओवरराइट कर सकता है की सराहना की।

+0

'-s' शीर्ष पर होगा के बाद से कार्यक्रम –

उत्तर

10

दर्ज करें जो read का कारण बनता है ताकि कर्सर को अगली पंक्ति में ले जाया जा सके। पिछली लाइन पर वापस लाने के लिए आपको टर्मिनल एस्केप का उपयोग करने की आवश्यकता है। और आपकी बाकी की स्क्रिप्ट में कुछ समस्याएं हैं। यहाँ कुछ है कि काम करता है, तो यह आपको एक बेहतर प्रारंभिक बिंदु देना चाहिए:

#!/bin/bash -e 

PROMPT=">" 
while read -p "${PROMPT}" line; do 
     echo -en "\033[1A\033[2K" 
     echo "You typed: $line" 
done 

\033 एक Esc है; \033[1A कर्सर को पिछली पंक्ति में ले जाता है, \033[2K जो भी उस पर था उसे मिटा देता है।

+3

FWIW में सही ढंग से टाइप करने के लिए मुश्किल होगा, पार्टी के गूंज भी एस्केप अनुक्रम' \ e' पलायन के लिए मान्यता देते हैं। – FatalError