ব্যবহারকারীর ইনপুট পরে পাঠ্য অদৃশ্য করুন


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একটি বিকল্প হয় না গুলি?
সেবাসথ

1
না, clearস্ক্রিনের উপরে ইতিমধ্যে মুদ্রিত আউটপুটটি যদি কোনও থাকে তবে তা সাফ করবে। @ সেবাসথ
জিপসিকোসমোনট

কোথা Are you fineথেকে আসে? তা কি হওয়া উচিত নয় How are you?
বারমার

@ বারমার হ্যাঁ, দুঃখিত যে ভুল করে ভুল হয়েছে, এখনই সংশোধন করেছেন
জিপসিকোসমোনট

উত্তর:


12

তুমি ব্যবহার করতে পার:

tput cr

(বা printf '\r') কার্সারটিকে লাইনের শুরুতে সরানো। অনুসরণ করেছেন:

tput el

লাইন শেষ পর্যন্ত সবকিছু মুছে ফেলতে। ( tcshএবং zshএছাড়াও আছে echotcbuiltin যা আপনি সাথে ব্যবহার করতে পারেন 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

ইডিয়ট প্রুফ থেকে শুরু করে মার্জিত পর্যন্ত এটি করার বিভিন্ন উপায় রয়েছে।

সর্বাধিক বুদ্ধিমান পদ্ধতি (যদিও সর্বাধিক কাজ) ব্যাকস্পেস স্পেস ব্যাকস্পেসটি পুনরাবৃত্তি হয় তবে বহুবার প্রয়োজন হয়। এটি টেলিটাইপস ছাড়াও সবকিছুতে কাজ করে (কাগজ থেকে কালি অপসারণ করা একটি চ্যালেঞ্জ)।

এর পরের স্কেলটি হ'ল ক্যারেজ রিটার্ন স্পেস স্পেস ক্যারিজ রিটার্ন। এটি টার্মিনাল এমুলেটরগুলির সাথে কাজ করে না যা প্রতিটি ক্যারেজ ফেরার আগে বা পরে একটি লাইনফিড সন্নিবেশ করে (এটি একটি বিকল্প মিনিকোম এবং অন্যদের থাকতে কনফিগার করা যেতে পারে)।

তারপরে টার্মিনাল নির্দিষ্ট কৌশল আছে আমি কেবলমাত্র টার্মক্যাপ সক্ষমতার কোডগুলি উল্লেখ করব কারণ টার্মক্যাপ এবং টার্মিনো ডাটাবেসগুলি ব্যবহার দেখাতে পারে। (এখানে একটি তালিকা।)

একক লাইনের জন্য সরল হ'ল কলাম (সিএফ) এ সরানো হয় তারপরে লাইন (সিএই) এর শেষে পরিষ্কার হয়।

মাল্টি লাইন প্রতিক্রিয়া সহ আরও জটিল মামলার জন্য এখানে পরম অবস্থান (স্কি), প্রম্পট, পড়ুন প্রতিক্রিয়া, কার্সার অবস্থান পুনরুদ্ধার (আরসি), পর্দার শেষে (সিডি) পরিষ্কার আছে।

বেশিরভাগ ক্ষেত্রে আপনি শেষ দুটি উত্তরের জন্য ভিটি 100 মানকে হার্ডকোড করতে পারেন কারণ বেশিরভাগ টার্মিনাল এমুলেটর এটির সাথে সামঞ্জস্যপূর্ণ। অবশ্যই সমস্ত টার্মিনাল সেই বিকল্পগুলিকে সমর্থন করে না, তবে সেগুলি বিরল এবং অপ্রচলিত নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.