শেল টাইপ করা কমান্ডগুলিতে, "রিসেট" কাজ করে না, তবে কী হয়েছিল?


57

আমার সমস্যাটি হ'ল বাশ শেলটি আমি এতে টাইপ করা অক্ষরগুলি দেখানো বন্ধ করে দেয়। এটি যদিও কমান্ডগুলি পড়তে পারে।

আমি এই সমস্যাটি বেশ কয়েকবার এসেছি এবং এর কারণ কী তা আমি বুঝতে পারি না। এটি কীভাবে সমাধান করা যায় তা আমি জানি তবে আমার সমস্যাগুলি থেকে বেরিয়ে আসার উপায়টি যখন আমি "ভুডিং" করছি তখন আমি সত্যিই তা পছন্দ করি না।

এই সমস্যাটি আমি যে দুটি উপায়ে এসেছি সে সম্পর্কে আমি বর্ণনা করব:

আমি একটি নির্দিষ্ট প্রক্রিয়া চালাচ্ছি, http://pythonpaste.org/script/ এবং কখনও কখনও যখন আমি এটি বন্ধ করি বা এটি ভেঙে দেয় তখন নিয়ন্ত্রণটি শেলের কাছে ফিরে দেওয়া হয়। তারপরে আমি শেলটিতে কমান্ড টাইপ করি এবং আমি যে অক্ষরগুলি টাইপ করি তা প্রদর্শিত হয় না। যখন আমি লিখতে চাপুন কমান্ড করছে জমা দেওয়া হয়েছে। উদাহরণস্বরূপ:

  • আমি "ls" টাইপ করি
  • আমি কেবল একটি খালি প্রম্পট এবং আরও কিছু দেখতে পাচ্ছি
  • আমি লিখতে টিপুন এবং আমি ফাইল একটি তালিকা দেওয়া করছি, অন্য কথায়: COMMAND হয় মৃত্যুদন্ড কার্যকর
  • যখন আমি "রিসেট" কমান্ড দিই শেলটি আবার স্বাভাবিকভাবে কাজ শুরু করে

দ্বিতীয় বারটি হ'ল আমি যখন এরকম একটি আদেশ দিই:

$ grep foo * -l | xargs vim

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

আমার অনুমান যে উভয় সমস্যার একটি অন্তর্নিহিত কারণ আছে তবে আমি কীভাবে বা কী কারণে তা সম্পর্কে স্ট্যাম্পড হয়েছি।

এই সমস্যাটি অনুসন্ধান করা নিজেই সমস্যাযুক্ত কারণ বিবরণটি এক ধরণের অস্পষ্ট এবং এর জন্য কোনও হার্ড অনুসন্ধান-শর্তাদি নেই।

সম্পাদন করা

দিচ্ছি

stty --all

জন এস। গ্রুবারের অনুরোধ অনুসারে কমান্ডটি নিম্নলিখিত আউটপুট দিয়েছে (পঠনযোগ্যতার জন্য সাদা স্থান)

speed 0 baud;
rows 53;
columns 186;
line = 0;
intr = <undef>;
quit = <undef>;
erase = <undef>;
kill = <undef>; 
eof = <undef>;
eol = <undef>; 
eol2 = <undef>; 
swtch = <undef>; 
start = <undef>; 
stop = <undef>; 
susp = <undef>;
rprnt = <undef>; 
werase = <undef>; 
lnext = <undef>; 
flush = <undef>; 
min = 0; 
time = 0;
-parenb 
-parodd cs8 
-hupcl 
-cstopb cread 
-clocal 
-crtscts
-ignbrk 
-brkint 
-ignpar 
-parmrk 
-inpck 
-istrip 
-inlcr 
-igncr 
-icrnl 
-ixon 
-ixoff 
-iuclc 
-ixany 
-imaxbel 
-iutf8
-opost 
-olcuc 
-ocrnl 
-onlcr 
-onocr 
-onlret 
-ofill 
-ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig 
-icanon 
-iexten 
-echo 
-echoe 
-echok 
-echonl 
-noflsh 
-xcase 
-tostop 
-echoprt 
-echoctl 
-echoke

2
যখন এটি ঘটে থাকে দয়া করে প্রবেশ করুন stty --allএবং ফলাফলটি আপনার প্রশ্নের মধ্যে রেখে দিন। ইকো একটি tty বৈশিষ্ট্য যা বন্ধ করা হচ্ছে। ভিম এটি চলাকালীন এটি করবে এবং এটি টার্মিনালটিও কাঁচা মোডে রাখবে। যখন এটি প্রস্থান করে তখন এটি টার্মিনাল সেটিংস নিজেই পুনরায় সেট করা উচিত। যখন ভিএম চলমান থাকে আপনি iকমান্ডটি প্রতিধ্বনিত করতে চান না যা সম্পাদককে সন্নিবেশ মোডে রাখে, উদাহরণস্বরূপ। এই সেটিংসটি টাইটি ডিভাইসটিকে বলে যে কীভাবে আপনি টাইপ করেন তা প্রক্রিয়াজাত করা উচিত। ভিএম চলমান অবস্থায় এটি প্রতিধ্বনিত হওয়া উচিত ইত্যাদি প্রতিধ্বনি করার যত্ন নেয়
জন এস গ্রুবার

অগ্রণীতে যখন চালানো হয় এবং আমি আইপিডিবি ডিবাগিং সেশনে থাকি তখন আমি জোপ (সিটিআরএল + সি সহ) বন্ধ করি যখন আমার একই লক্ষণ রয়েছে।
মার্ক ভ্যান লেন্ট

@ মারকভ্যানলেন্ট আমার মনে হয় আমারও খুব সমস্যা হয়েছে
নিলস বম

@ জনএসগ্রুবার আমি stty --allআমার প্রশ্নের আউটপুট যুক্ত করেছি । আগাম ধন্যবাদ!
নীলস বোম

উত্তর:


68

শেলটিতে শেল বা বেশিরভাগ প্রোগ্রাম চালানোর সময় আপনার টাইপ করা কোনও কিছু কার্নেলের টিটিটি সাব সিস্টেমের মাধ্যমে ব্যবহারকারীর টার্মিনালে ফিরে আসে cho মুছে ফেলা অক্ষরগুলির জন্য অন্যান্য বিশেষ হ্যান্ডলিং রয়েছে, Ctrl + R, Ctrl + Z ইত্যাদি।

কমান্ড লাইন থেকে চালিত কিছু প্রোগ্রাম (বিশেষত সম্পাদকীয়) এর প্রয়োজন হয় না বা এটি চান না। এই কারণে তারা tty (টার্মিনাল) ডিভাইসের বিরুদ্ধে আইওসিটিএল কল দিয়ে কার্নেলটিকে সংকেত দেয় যে তারা এই আচরণটি চায় না। তারা চায় না যে বিশেষ চরিত্রগুলি বিশেষ কিছু করতে পারে। পরিবর্তে তারা "কাঁচা" মোডের জন্য কার্নেলকে জিজ্ঞাসা করে। বিশেষত, সম্পাদকের মতো ভিম বিভিন্ন "ইকো সেটিংস" বন্ধ করে দেয়। এটি সমস্ত কোনও কম্পিউটারের সিরিয়াল লাইনগুলির প্রকৃত tty টার্মিনালগুলিতে, বা Alt + Ctrl + F1 এর ভার্চুয়াল টার্মিনালগুলিতে বা আপনি যখন GUI এর অধীনে জিনোম-টার্মিনালের মতো কিছু চালান তখন সত্যই ভার্চুয়াল টার্মিনালগুলির ক্ষেত্রে প্রযোজ্য।

এই প্রোগ্রামগুলি প্রস্থান করার আগে তারা যে ভার্চুয়াল টিটি ব্যবহার করছে তা পরিবর্তনের আগে কমান্ড সম্পাদক কমান্ড দিয়ে বা উদাহরণস্বরূপ (নিয়ন্ত্রণ + সি থেকে) একটি সংকেত নিয়ে পুনরায় সেট করার কথা রয়েছে।

যদি তারা এটি যথাযথভাবে করতে ব্যর্থ হয় তবে আপনার সন্ধানের মজাদার অবস্থায় টিটিটি বাকি রয়েছে। যেহেতু প্রোগ্রামগুলি টার্মিনালটি পুনরায় সেট করতে ব্যর্থ হতে পারে, resetতাই ব্যবহারকারীকে পুনরুদ্ধার করার জন্য কমান্ডটি লেখা হয়েছিল।

আমি ধরে নিচ্ছি যে বাধাদানটি আপনি চালাচ্ছেন অজগর সফটওয়্যারটির সাথে ঝামেলা করছে। আমি অনুমান করতে পারি যে প্রোগ্রামটি টার্মিনালটি পুনরায় সেট করার সুযোগ পাচ্ছে না, বা কেবল এটি করতে ব্যর্থ হচ্ছে।

ভিমের ক্ষেত্রে, আমি যখন আপনার উদাহরণটি চালাচ্ছি তখন আপনার বর্ণনার সাথে আমি একইরকম আচরণ পাই। আমি একটি বার্তাও দেখতে পাচ্ছি "ভিম: সতর্কতা: ইনপুট কোনও টার্মিনাল থেকে নয়" (আপনি পুনরায় সেট করার সময় এটি চলে যায়)। এটি কারণ শৃঙ্খল থেকে সাধারণত ভিএম শুরু হয় না। পরিবর্তে 'গ্রেপ' এবং 'xargs' কমান্ড grepটিটিও থেকে ফাইলের নামগুলি পাস করার উদ্দেশ্যে, সাধারণত tty দ্বারা দখল করা স্ট্যান্ডার্ড ইনপুট ব্যবহার করে চলেছে xargs

আপনার পোস্ট আউটপুটে stty -aআমরা "-ইচো" দেখতে পাচ্ছি, এটিও নিশ্চিত করে যে এটিই সমস্যা। আপনি যদি ভিএমকে এমনভাবে হত্যা করতে পারেন যে এটি সিগন্যালটি গ্রেফতার করতে না পারে আপনি সম্ভবত একই সমস্যা দেখতে পাবেন।

সমস্যাটি অন্য কোথাও https://stackoverflow.com/questions/3852616/xargs-with-command-that-open-editor-le وی- শেল- ইন- ওয়েয়ার্ড- স্টেটে বর্ণিত হয়েছে ।

ভিএম কেসের সমাধান হ'ল এক্সার্গস এড়ানো এবং পরিবর্তে ব্যবহার করুন:

 vim $(grep foo * -l)

এখানে ফাইলগুলির তালিকাটি শেল দ্বারা তৈরি করা হয়েছে, যেমনটি জার্গার্স দ্বারা তৈরি করা হয়েছিল, তবে শেলটি ভিএম কল করছে, এটি সরাসরি টিটিটির সাথে যুক্ত। ত্রুটি আউটপুট ফাইলটিতে সতর্কতা বার্তা প্রেরণ করা হয়েছে, এবং ভিএমটি টিটি সেটিংস সঠিকভাবে সেট করে পুনরায় সেট করে।

আরো রেফারেন্স এখানে , এবং অন্য আকর্ষণীয় এক এখানে । আরও একটি আকর্ষণীয় সমাধান https://stackoverflow.com/questions/8228831/why-does-locon-filename-xargs-vim-cause-strange-terminal-behaviour এর উত্তরে দেওয়া হয়েছে ।


পুরো ব্যাখ্যা জন্য ধন্যবাদ। এটি কাজ না করার পুরো কারণটি দেখতে দেখতে গভীর গভীর রাবিথোল (tty, ioctl, ইত্যাদি) এর মতো দেখাচ্ছে তাই আমি বলতে পারি না আমি পুরোপুরি বুঝতে পেরেছি, তবে এটি আর ভুডু নয়, তাই আবার ধন্যবাদ!
নীলস বোম

সম্পূর্ণ হওয়ার জন্য আমি grep foo * -l | vim -সমস্যা ছাড়াই মৃত্যুদণ্ড কার্যকর করতে পারি । সুতরাং আমি মনে করি সমস্যাটি গ্রেপ এবং xargs নিয়ে নয়, তবে কেবল xargs এর সাথে। তুমি কি রাজি?
নীলস বোম

1
এটি গ্রেপ বা xargs নিয়ে কোনও সমস্যা নয়। এটি স্ট্যান্ডিন আর টিটিআই-তে সেট করা নেই এমনটি সমস্যা। এটি পাশাপাশি ব্যর্থ। সত্য | vi / tmp / afile1। একটি উল্লেখের মধ্যে উল্লেখ করা হয়েছে যে ভিম স্ট্যান্ডিনকে স্টাডআউট (এখনও টিটিটি) সেট করে কারণ স্টিডন এই সিটেশনগুলিতে / ডিভ / নাল সেট করা হয়েছে। যখন এটি করে যে ভিম ইকো এবং অন্যান্য সেটিংস মনে রাখতে এবং পুনরায় সেট করতে পারে কিন্তু তা করে না। আমি মনে করি এটি ভিমের সমস্যা।
জন এস গ্রুবার

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

1
ধন্যবাদ! অবশেষে কীভাবে সিটিআরএল-সি করার পরে ওএস এক্স ব্যাশে পুনরুদ্ধার করবেন তা নির্ধারণ করলেন git add -p!
স্টিভ জ্যানসেন

0

আমি সিস্টেমে একটি নতুন ব্যবহারকারী শুরু করব (যার অর্থ একটি নতুন পরিষ্কার ব্যবহারকারী তৈরি করুন এবং সেখানে লগইন করুন), এবং দেখুন সমস্যা আছে কিনা। যদি তা না হয় - তবে এটি হয় আপনার টার্মিনাল বা আপনার এক্স 11 সেটিংস।


আমি একটি নতুন ব্যবহারকারী যুক্ত করেছি এবং grep foo * -l | xargs vimকমান্ড দিয়ে এটি পরীক্ষা করেছি । সমস্যাটি এখনও রয়েছে। আমার এক্স 11 সেটিংস কীভাবে আমার টার্মিনালটি বিটিডব্লিউ প্রতিক্রিয়া জানায় তা আমি ঠিক বুঝতে পারি না। আপনি কি এই বিস্তারিত বলতে পারেন? ধন্যবাদ!
নীলস বোম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.