ব্যাকস্পেস চলমান বাশ স্ক্রিপ্টের অভ্যন্তরে কাজ করে না


8

আমি খুব সাধারণ স্ক্রিপ্ট চালাচ্ছি যা লাইন দ্বারা লাইন পড়ে এবং প্রিন্টগুলি টার্মিনালে ফিরে প্রবেশ করে:

while read CMD; do
    echo $CMD
done

এটি দুর্দান্ত কাজ করে, তবে যখন আমি backspaceচরিত্রের সাথে লাইন সম্পাদনা করার চেষ্টা করছি তখন এটি অক্ষর মুছার ^?পরিবর্তে মুদ্রণ করে। আর যখন আমি চাপুন Ctrl+ + backspaceআউটপুট ^H। এই আচরণটি কীভাবে স্থির করা যায় তাই backspaceএই অক্ষরগুলি যুক্ত করার পরিবর্তে অক্ষর মুছে ফেলা যায়? আমি stty erase '^?'কমান্ড চেষ্টা করেছি কিন্তু সফলভাবে হয়নি not


দয়া করে নোট করুন 16.10 গত মাসে এর সমর্থন চক্রের শেষে পৌঁছেছে। আপনার যত তাড়াতাড়ি সম্ভব 17.04 এ আপগ্রেড করা উচিত।
বাইট কমান্ডার

1
আমি read CMDদ্বারা প্রতিস্থাপন পরামর্শ read -e CMD
সাইরাস

1
terminatorপরিবর্তে চেষ্টা করুন gnome-terminal। এটি প্রত্যাশার মতো কাজ করছে
সেভেরাস টাক্স

1
@ যে এই স্ক্রিপ্টের জন্য কাজ করেছে। আমার আসল পরিস্থিতিতে আমার কাছে প্রোগ্রাম থেকে ইনপুট রয়েছে, যা রিডকে কল করে না। প্রোগ্রামের স্ক্রিপ্টটি পরিবর্তন করার আমার কোনও সুযোগ নেই, এটি কেবল একটি উদাহরণ যা আমার সমস্যার প্রতিনিধিত্ব করেছিল। এমন কোনও বিশ্বব্যাপী সেটিংস রয়েছে যেখানে আমি সমস্ত ইনপুটটির জন্য এই কনফিগারেশনগুলি সম্পন্ন করতে পারি?
vrom911

1
@Cyrus আমার ব্যাকস্পেস কাজ হিসাবে আমি চাই - এটা এমনকি ছাড়া প্রশ্নটি থেকে এই স্ক্রিপ্টের জন্য সবসময় শেষ অক্ষর মোছা হয়, -eবিকল্প। তবে @ vrom911 এর মেশিনে এটি হয় না। আমি ভাবছি কেন এটি ঘটে এবং কোথায় এটি কনফিগার করা যায়।
শেরেশ

উত্তর:


6

সমস্যাটি হ'ল ব্যাকস্পেস উপস্থাপনের অনেকগুলি উপায় রয়েছে তবে readকমান্ডটি সেগুলি সব বুঝতে পারে না। ← Backspaceআপনার টার্মিনাল এমুলেটরের সেটিংসে কী টিপলে ঠিক কী পাঠানো হয় তা কনফিগার করতে সক্ষম হওয়া উচিত ।

ধরে নিই যে আপনি gnome-terminalএমুলেটর হিসাবে ব্যবহার করছেন , সম্পাদনা ম্যানুটি খুলুন এবং প্রোফাইল পছন্দগুলিতে ক্লিক করুন । সামঞ্জস্যতা ট্যাবে স্যুইচ করুন এবং আপনার এই বিকল্পগুলি পাওয়া উচিত:

জিনোম-টার্মিনাল → প্রোফাইল পছন্দসমূহ → সামঞ্জস্য

এখন আপনি ব্যাকস্পেস কী উত্পন্ন করে: সেটিংস পরিবর্তন করতে পারেন । নীচে এই পাঁচটি অপশন আপনার চয়ন করার জন্য উপলভ্য। তারা আমার সিস্টেমে কীভাবে আচরণ করে তা আমি ব্রেসগুলিতে যুক্ত করেছি:

  • স্বয়ংক্রিয় (কাজ)
  • কন্ট্রোল-এইচ ( ^Hপরিবর্তে মুদ্রণ )
  • এএসসিআইআই ডেল (ডিফল্ট, কাজ করে)
  • সিকোয়েন্স ক্রম ( ^[[3~পরিবর্তে মুদ্রণ )
  • টিটিওয়াই ইরেজ (কাজ)

বর্তমানে আমার এএসসিআইআই ডেল আছে। আমি সমস্ত 5 টি অপশন চেষ্টা করে দেখেছি তবে তাদের মধ্যে কেউই সমস্যাটি স্থির করেনি।
vrom911

অদ্ভুত। আপনি কি আমার বলতে পারেন type readএবং কি শেল / সংস্করণ $SHELL --versionরিপোর্ট করে?
বাইট কমান্ডার

আমি জানি এটা অদ্ভুত। আমি আমার সমস্যাটি গুগল করার চেষ্টা করেছি কিন্তু আমার পক্ষে কার্যকর এমন সমাধান খুঁজে পেল না। type readবলে read is a shell builtin। এবং $SHELL --versionবলেGNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
vrom911

1

জ্ঞোম-টার্মিনালে ব্যাশ ব্যবহার করে আমারও একই সমস্যা ছিল।

নোট করুন যে কমান্ড লাইনে, ব্যাকস্পেসটি প্রত্যাশার মতো কাজ করে, তবে যখন আমার প্রোগ্রাম (একটি সাধারণ টিসিপি সকেট ভিত্তিক চ্যাট ক্লায়েন্ট) স্টিডিনের কাছ থেকে পড়ছে, তখন backspaceঅক্ষরটি ^?শেষ অক্ষরটি মোছার পরিবর্তে (পর্দার প্রতিধ্বনি প্রতিলিপি) প্রিন্ট করে ।

# stty icanon"ক্যানোনিকাল (রান্না) মোড" অনুমতি দেওয়ার জন্য ব্যবহার করুন । এখানে কিছু ব্যাখ্যা দেখুন /unix/131105/how-to-read-over-4k-input-without-new-lines-on-a-terminal

আমার সমস্যা / সমাধানের আরও কিছু পটভূমি: আমার একটি সমস্যা ছিল যেখানে আমাকে 4k এর বেশি অক্ষর আটকে দিতে হবে। এবং সেই গবেষণার সময় আমাকে উপরের লিঙ্কে নিয়ে যাওয়া হয়েছিল। আমি # stty -icanon4k সীমাটি অক্ষম করতাম , তবে ব্যাকস্পেস (মুছা) ব্যবহারের ক্ষমতা হারিয়ে ফেলেছি।

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