কনসোলটির কেন কখনও কখনও সিটিআরএল + সি এর পরে পুনরায় সেট করা প্রয়োজন


9

কিছু কমান্ড লাইন ইন্টারফেস সরঞ্জামগুলি বাতিল হয়ে গেলে একটি ভাঙ্গা কনসোল ফিরিয়ে দেয় CTRL+C। কখনও কখনও পাঠ্যটি অদৃশ্য থাকে বা আমি কমান্ডটি চালা না করা পর্যন্ত গ্রাফিক সমস্যা রয়েছে reset

(আমি ব্যাশ ব্যবহার করি তবে আশা করি এটি শেলের থেকে স্বতন্ত্র।)

এই প্রভাবটির কোনও নাম আছে? এর কারণ কী, এবং প্রোগ্রামাররা কীভাবে সরঞ্জামগুলিতে এটি প্রতিরোধ করতে পারে? বড় ধরনের প্রোগ্রামিং ভাষাগুলিতে কীভাবে এই সমস্যাটিকে মোকাবিলা করা হয় তার কোনও কৌশল আছে?



stty saneধূসর দাড়িটির জন্য
থরবজর্ন রাভন অ্যান্ডারসন

উত্তর:


14

একটি কনসোলের মাঝে মাঝে একটি reset(1) (বা কিছু stty(1)কমান্ড) প্রয়োজন হয় কারণ কিছু প্রক্রিয়া (যেমন আপনার শেল দ্বারা শুরু করা একটি প্রোগ্রাম) শেষ হয়ে গেলে সিউডো-টার্মিনালের অবস্থা পরিবর্তন হয় না।

Tty demysified পড়ুন ।

(আমি সিউডো-টার্মিনাল এবং সিউডোটিসকে লিনাক্সের সবচেয়ে কঠিন অংশ হিসাবে পরিচালনা করেছি

বড় ধরনের প্রোগ্রামিং ভাষাগুলিতে কীভাবে এই সমস্যাটিকে মোকাবিলা করা হয় তার কোনও কৌশল আছে?

টার্মিনালটির সাথে আচরণ করে এবং এর মোড বা লাইন শৃঙ্খলা পরিবর্তনের জন্য একটি ভাল আচরণের প্রোগ্রামটি ক্র্যাশ হওয়া এড়ানোর জন্য যথাসাধ্য চেষ্টা করা উচিত এবং টার্মিনালটিকে সঠিক অবস্থায় রাখতে উপযুক্ত কলগুলি ( টার্মিয়াস (3) দেখুন ) জারি করা উচিত। বিটিডাব্লু, এনক্রেস বা রিডলাইনের মতো লাইব্রেরিগুলি সহায়ক (তবে আপনাকে তাদের পরিষ্কার করার রুটিনগুলি যথাযথভাবে কল করতে হবে)।

দেখুন সংকেত (7) এবং সংকেত-নিরাপত্তা (7) । আপনার কোডে ক্রাশ হওয়া এড়ানো কঠিন। অপরিবর্তিত আচরণ সম্পর্কে পড়ুন ।

একটি অসম্পূর্ণ কাজ হ'ল শেল ফাংশনটি সংজ্ঞায়িত করা যেতে পারে যা আপনার প্রোগ্রামটি চালায় যা একটি করে reset(যা কখনও কখনও অনুপযুক্ত হতে পারে)।


এই কাজটি দুর্দান্ত নয়; কখনও কখনও মূল সেটিংস থেকে resetবিভিন্ন sttyসেটিংসে ফলাফল করতে পারে।
বব

হ্যাঁ, এটি নির্দেশ করার জন্য ধন্যবাদ। আমি "অপূর্ণ" যুক্ত করেছি।
বেসাইল স্টারিঙ্কেভিচ

আমি আপনার লিঙ্কগুলি পড়েছি, সেগুলি আকর্ষণীয় ছিল তবে এটি সহায়ক হবে, যদি আপনি এই প্রশ্ন / এটির প্রতিটি বিভাগে একটি পয়েন্টার যুক্ত করতে পারেন। Tty demysified পড়ার পরে, আমি stty -a > /tmp/test1ব্যাশ শুরু করি তখন একটি কমান্ড, যা আমি বাতিল করে দিয়েছিলাম। টার্মিনালের রঙ এখন লাল ছিল। stty -a > /tmp/test2কিন্তু test1এবং test2ঠিক একই ছিল।
জোনাস স্টেইন

1

এই সমস্যার প্রতিক্রিয়া সম্পূর্ণ শেল-স্বতন্ত্র নয়। Zsh এ, বিল্টিন রয়েছে ttyctl, যা tty মোডটি "হিমশীতল" বা "জমাটবদ্ধ" করতে পারে। ব্যাশের সমতুল্য বলে মনে করি না। settyTcsh শেল কমান্ড একই জিনিস আছে, কিন্তু আরো নিখুঁতভাবে: আপনি কোন সেটিংস বরফে পরিণত করা যেতে পারে।

টিটিটি মোড হিম করার অর্থ হ'ল zsh বর্তমান মোডটিকে স্মরণ করবে এবং ভবিষ্যতের কিছু শিশু যদি এটি পরিবর্তন করে তবে শিশু স্থগিত বা বন্ধ হয়ে গেলে মোডটি পুনরুদ্ধার করা হবে।

এটি আপনাকে প্রোগ্রামের কিছু খারাপ প্রভাব থেকে রক্ষা করবে যা টার্মিনালটি ক্র্যাশ করেছে বা অন্যথায় ব্যর্থ হয়েছে। আপনি অবশ্যই পরিবর্তন আনতে ভুলবেন না যদি আপনি এর সাথে sttyকোনও পরিবর্তন আনতে চান , অন্যথায় শেল আপনার যা কিছু করেছে তত্ক্ষণাত পূর্বাবস্থায় ফিরে যাবে stty

resetsttyমোডগুলি পুনরুদ্ধার করার চেয়ে আরও বেশি কিছু করে , তাই আপনার এখনও এটি কখনও কখনও প্রয়োজন হতে পারে তবে প্রায়ই হয় না।


প্রকৃতপক্ষে: আমি স্ট্যাটি-এ> / টিএমপি / টেস্ট 1 শুরু করেছিলাম তখন একটি কমান্ড, যা আমি বাতিল করে দিয়েছিলাম। টার্মিনালের রঙ এখন লাল ছিল। stty -a> / tmp / test2 তবে টেস্ট 1 এবং টেস্ট 2 ঠিক একই ছিল। Tcsh দিয়েও আমি একই চেষ্টা করেছি, তবে আমি আমার কমান্ডটি CTRL + C দ্বারা ক্র্যাশ করতে পারিনি। রং ঠিক আছে।
জোনাস স্টেইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.