उपयोगकर्ता इनपुट के बाद पाठ को गायब कर दें


9

क्या कोई तरीका है जिससे आप उपयोगकर्ता द्वारा इनपुट देने के बाद ही प्रदर्शित सामग्री को गायब कर सकते हैं?

उदाहरण के लिए, इस फ़ाइल को नीचे ले जाएं

#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
    echo 'Have fun'
else
    echo 'Go to Doctor'
fi

यदि आप इसे चलाते हैं, तो आउटपुट है

how are you ? yHave fun

मैं एक ऐसी चीज की तलाश कर रहा हूं जो how are you ?उपयोगकर्ता द्वारा किसी कुंजी को दबाते ही मुझे गायब कर दे

और फिर गायब होने के बाद प्रिंट करें Have fun

इसलिए, मैं चाहता हूं कि उपरोक्त कार्यक्रम का अंतिम आउटपुट केवल हो

Have fun

नोट: इसके अलावा, इस स्क्रिप्ट के ऊपर कुछ भी जो शेल स्क्रीन पर छपा है, उसे मिटाया नहीं जाना चाहिए।

मै इस्तेमाल कर रहा हूँ bash


2
एक विकल्प नहीं है के clearबीच में उपयोग echo?
sebasth

1
नहीं, clearस्क्रीन पर पहले से ही प्रिंट होने वाले आउटपुट को साफ कर देगा यदि कोई हो। @sebasth
GypsyCosmonaut

कहाँ Are you fineसे आता है? ऐसा नहीं होना चाहिए How are you?
बरमार

@Barmar हाँ, गलती से क्षमा करें, अब ठीक किया गया है
GypsyCosmonaut

जवाबों:


12

आप उपयोग कर सकते हैं:

tput cr

(या printf '\r') कर्सर को लाइन की शुरुआत में ले जाने के लिए। के बाद:

tput el

लाइन के अंत तक सब कुछ हटाने के लिए। ( tcshऔर zshभी echotcअंतर्निहित है जो आप के साथ उपयोग कर सकते हैं termcapकि के बराबर terminfo el: echotc ceभी ( echoti elमें zsh))


14

गाड़ी वापसी ( \r) का उपयोग करें । यह विशेष चरित्र (मैकेनिकल टाइपराइटर के दिनों से बचा हुआ) कर्सर को लाइन की शुरुआत में वापस ले जाएगा। फिर, आपको उतने ही स्थान चाहिए जितने संदेश आप हटाना चाहते हैं (यह संदेश को अधिलेखित कर देगा) और फिर अगले संदेश को प्रिंट करने से पहले दूसरी गाड़ी फिर से शुरुआत में वापस आ जाएगी। कुछ इस तरह:

#!/bin/bash
echo foo
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
    printf '\r                \rHave fun\n'
else
    printf '\r                \rGo to Doctor\n'
fi

प्रिंट से ऊपर की स्क्रिप्ट चलाना:

$ foo.sh
foo
Have fun        

1
दो के बजाय \rआप \rHave funऔर के बीच सभी रिक्त स्थान डाल सकते हैं \n
बमर

2

ऐसा करने के कई तरीके हैं, जिसमें बेवकूफ सबूत से लेकर सुरुचिपूर्ण तक शामिल हैं।

सबसे मूर्ख विधि (हालांकि सबसे अधिक काम) बैकस्पेस स्पेस बैकस्पेस है जिसे हालांकि कई बार दोहराया जाता है। यह सब कुछ पर काम करता है लेकिन टेलेटिप (कागज से स्याही हटाना एक चुनौती है)।

अगले पैमाने पर कैरिज रिटर्न स्पेस कैरिज रिटर्न है। यह टर्मिनल एमुलेटर के साथ काम नहीं करता है जो प्रत्येक कैरिज रिटर्न से पहले या बाद में एक लाइनफीड डालते हैं (यह एक विकल्प मिनिकॉम है और अन्य को कॉन्फ़िगर किया जा सकता है)।

फिर टर्मिनल विशिष्ट चालें हैं जिनका मैं केवल टर्म कैपेसिटी कोड्स का उल्लेख करूंगा क्योंकि टर्मपैक और टर्मफोर्स डेटाबेस उपयोग दिखा सकते हैं। (यहाँ एक सूची है)

एकल लाइन के लिए सरल स्तंभ (ch) की ओर जाता है और इसके बाद पंक्ति (CE) के अंत तक स्पष्ट होता है।

मल्टी लाइन प्रतिक्रियाओं सहित अधिक जटिल मामलों के लिए पूर्ण स्थिति (sc), प्रॉम्प्ट, रीड रिस्पॉन्स, कर्सर स्थिति (आरसी) को पुनर्स्थापित करना, स्क्रीन के अंत तक स्पष्ट है (सीडी)।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.