কিভাবে পড়ার সময় ব্যাকস্পেস পরিচালনা করবেন?


10

প্রবেশ করা ব্যাকস্পেসগুলি আমি কীভাবে পরিচালনা করব, এটি প্রদর্শিত হয়েছে ^?এবং কীভাবে readচরিত্রগুলি গণনা করা হয়েছে তা 12^?3ইতিমধ্যে দেখানো হয়েছে যে ইতিমধ্যে 5 টি অক্ষর সম্পূর্ণ ছিল (যদিও সবগুলিই প্রকৃত ইনপুট ছিল না), তবে 12^?3^?প্রম্পটটি ফিরিয়ে দেওয়ার পরেও তা অদ্ভুত। সাহায্য করুন!

-bash-3.2$ read -n 5
12^?3^?-bash-3.2$

উত্তর:


10

আপনি যখন সরল read(বা read -rঅন্যান্য বিকল্পগুলি যা এই আচরণকে প্রভাবিত করে না) দিয়ে পুরো লাইনটি পড়েন , তখন কার্নেল-সরবরাহিত লাইন সম্পাদক Backspaceএকটি অক্ষর মুছতে চাবিটি সনাক্ত করে এবং খুব কম কয়েকটি কমান্ড ( Returnইনপুট সমাপ্ত সহ) লাইন এবং এটি প্রেরণ)। শর্টকাট কীগুলি ইউটিলিটির সাথে কনফিগার করা যেতে পারে stty। টার্মিনালটি যখন তার লাইন সম্পাদকটি সক্রিয় থাকে তখন রান্না করা মোডে থাকতে বলে। কাঁচা মোডে, কীবোর্ডে টাইপ করা প্রতিটি অক্ষর তত্ক্ষণাত অ্যাপ্লিকেশনটিতে স্থানান্তরিত হয়। রান্না করা মোডে, অক্ষরগুলি একটি বাফারে সংরক্ষণ করা হয় এবং কেবলমাত্র সম্পূর্ণ লাইনগুলি অ্যাপ্লিকেশনটিতে স্থানান্তরিত হয়।

প্রয়োগের জন্য নির্দিষ্ট সংখ্যক অক্ষরের পরে পড়া বন্ধ করতে read -n, বাশকে কাঁচা মোডে যেতে হবে। কাঁচা মোডে, টার্মিনাল Backspaceকীটির কোনও প্রসেসিং করে না (আপনি চাপার সময় Backspaceপূর্বের অক্ষরটি ইতিমধ্যে বাশকে প্রেরণ করা হয়েছে), এবং বাশ কোনও প্রসেসিং করে না (সম্ভবত সম্ভবত এটি বৃহত্তর নমনীয়তা দেয় কারণ স্ক্রিপ্টটিকে নিজস্ব প্রসেসিং করার অনুমতি দেওয়ার)।

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


9

ব্যবহার read -e:

$ read -e -n 5
13acX

read -e মানে হল:

রিডলাইন ( কমান্ড লাইন সম্পাদনা দেখুন ) লাইনটি পেতে ব্যবহার করা হয়।

আপনি যখন এটি করেন, আপনি ব্যাকস্পেস সহ নিয়মিত শেল প্রম্পটে লেখার সময় যে কোনও উপায়ে ইনপুট সম্পাদনা করতে পারেন Home


1

readএকটি বাশ অন্তর্নির্মিত। (দেখুন type read।) আপনি এর সাথে ডকুমেন্টেশন সন্ধান করতে পারেন man bash:

   read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
   [...]
          -e     If the standard input is coming from a terminal, readline (see READLINE above) is used to obtain the line.
                 Readline uses the current (or default, if line editing was not previously active) editing settings.

অথবা আপনি ব্যবহার করতে পারেন help read:

read: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
      -e                use Readline to obtain the line in an interactive shell

-eসুইচ readline সমর্থন যা মূলত ব্যাকস্পেস হ্যান্ডলিং সহ সব শেল প্রম্পটে প্রাপ্তিসাধ্য অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে দেয় দেয়।

অতএব read -en 5আপনি যা চান তা করা উচিত।


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