একটি ডিস্ক ব্যর্থতার কারণে আমরা সম্প্রতি আমাদের সার্ভারটি পুনরায় ইনস্টল করেছি এবং এখন আকার পরিবর্তনকারী টার্মিনালগুলির সাথে আমাদের একটি সমস্যা রয়েছে। আমরা ডেবিয়ান 6.0.6 ইনস্টল করেছি।
লক্ষণ
আপনি যখন কোনও টার্মিনালটির আকার পরিবর্তন করেন, কোনও এনক্রাস-ভিত্তিক অ্যাপ্লিকেশন (পরীক্ষিত: ytalk, irssi, স্ক্রিন, tmux, কিছু ncurses উদাহরণ অ্যাপ্লিকেশন) সঠিকভাবে আকার পরিবর্তন করতে পারে বলে মনে হয় না। স্ক্রিনটি সাধারণত ফাঁকা হয়ে যায়। অ্যাপ্লিকেশনটিতে একটি পুনরায় আঁকতে বাধ্য করা পুরানো টার্মিনাল আকার ব্যবহার করে পুনরায় আঁকবে।
বাশ (4.1.5 (1)) প্রম্পটে উইন্ডোটির আকার পরিবর্তন করার সময়, COLUMNS এবং লাইনগুলি ভেরিয়েবলগুলি কখনই আপডেট হয় না।
কারণ নির্ণয়
ব্যাগের মধ্যে সাইনচঞ্চ ফাঁদে দেওয়ার চেষ্টা করা হচ্ছে বলে মনে হয় এটি কখনই গৃহীত হয় নি। এটি দিয়ে পরীক্ষা করা হয়েছিল:
trap 'touch /home/user/sigwinch' SIGWINCH
trap 'touch /home/user/sigusr1' SIGUSR1
kill -s SIGWINCH $$
kill -s SIGUSR1 $$
যা আমার হোম ডিরেক্টরিতে উভয় ফাইল তৈরি করা উচিত ছিল। এটি কেবল তৈরি হয়েছিল /home/user/sigusr1
।
চেষ্টা করার kill -s SIGWINCH $$
ফলে $ COLUMNS / $ লাইনগুলি ভেরিয়েবলের আপডেট হতে পারে না।
checkwinsize
( shopt -s checkwinsize
) সক্ষম করার ফলে কোনও অ্যাপ্লিকেশন থেকে প্রত্যাবর্তনের পরে প্রত্যাশার কারণে ash COLUMNS /। লাইনগুলি আপডেট করা হবে update এটি checkwinsize
সক্ষম সহ একটি টার্মিনালকে আকার দেওয়ার পরে নিম্নলিখিত দিকে নিয়ে যায় :
$ echo $COLUMNS ; ls > /dev/null ; echo $COLUMNS
72
107
আমার লগইন শেলটি টিসিএস-এর মতো কিছুতে পরিবর্তন করা এবং টার্মিনালটিকে পুনরায় আকার দেওয়ার চেষ্টা প্রত্যাশার মতো কাজ করে, যেমন আমি পরীক্ষিত অন্যান্য বাক্সগুলিতে ব্যাশ করে।
আমি আমার .bashrc সরানোর চেষ্টা করেছি এবং এটি কিছুই করেনি। লিনাক্স বাক্স থেকে পুটিটিওয়াই এবং কিছু ধরণের আরএক্সভিটি-টাইপ টার্মিনালের বিভিন্ন বাশ কনফিগারেশন সহ বিভিন্ন অন্যান্য ব্যবহারকারীদের জন্য এই সমস্যা দেখা দিচ্ছে।
strace,
আমি বাশের উপর স্ট্রেস দৌড়ে গিয়ে টার্মিনালের আকার পরিবর্তন করার চেষ্টা করলাম, কিছুই আসেনি ( read
প্রম্পটটি মুদ্রণের সাথে সাথে এটি একটি কলে অবরুদ্ধ ছিল )।
আমি খালি লাইনে ফিরলাম, এবং ব্যাশ পুরো গোছা জিনিস করেছে। আমি যে আউটপুটটি প্রাসঙ্গিক বলে মনে করি তা হ'ল: ( সম্পূর্ণ স্ট্রেস )
1: rt_sigprocmask(SIG_SETMASK, [WINCH], NULL, 8) = 0
2: rt_sigaction(SIGWINCH, {0x80e2c20, [], SA_RESTART}, {0x809c310, [], 0}, 8) = 0
3: rt_sigprocmask(SIG_BLOCK, [INT], [WINCH], 8) = 0
4: write(2, "aa:~$ ", 6) = 6
5: rt_sigprocmask(SIG_SETMASK, [WINCH], NULL, 8) = 0
6: rt_sigprocmask(SIG_BLOCK, NULL, [WINCH], 8) = 0
7: read(0,
যা আমার বোঝার জন্য বাশ দেখায়: (আমি এটি মারাত্মকভাবে ভুল বুঝে উঠতে পারি I'm আমি এখানে আমার উপাদান থেকে দূরে আছি))
1: Disabling delivery of the SIGWINCH signal, when previously it was allowed.
2: Registering a handler for the SIGWINCH signal.
3: Masking some other combination of signals. As evidenced by line 5, this does not include SIGWINCH.
4: Printing the prompt.
5: Masking SIGWINCH, where previously nothing was blocked.
6: Masking the "union of null and SIGWINCH" which, to my understanding, would result in SIGWINCH being masked.
7: Waiting on input.
এই সমস্যাগুলি ছাড়াই একটি বাক্সে সঞ্চালিত একই স্ট্রেস (উবুন্টু, বাশ 4.2.24 (1)) এর ফলস্বরূপ:
1: rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
2: rt_sigaction(SIGWINCH, {0x49e320, [], SA_RESTORER|SA_RESTART, 0x7f7ef49f64c0}, {0x457880, [], SA_RESTORER, 0x7f7ef49f64c0}, 8) = 0
3: rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
4: write(2, "aaaaaaa:~$ ", 11) = 11
5: rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
6: rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
7: read(0,
প্রশ্ন
নরকে কী চলছে আর আমার বাশ কেন ভেঙে গেছে? :(
আমি অনুমান করছি যে সম্ভবত কোথাও একটি অপশন আছে যা অপ্রত্যাশিত কিছুতে ডিফল্ট হয়েছিল, তবে গুগলে কয়েক ঘন্টা কিছুই আপ হয় নি।
যে কোনও সহায়তা এবং / অথবা পয়েন্টারগুলি প্রশংসিত হয়। এটি সত্যিই হতাশাব্যঞ্জক।
ধন্যবাদ.
exec bash
এবং exec bash -l
একই আচরণ প্রদর্শন। আমি মনে করি এটি একটি ছোট সান্ত্বনা যা আমি এতে একা নই। যদিও এর কারণ কী তা নিয়ে আমি পুরোপুরি বিভ্রান্ত। একটি নতুন ডাউনলোড করা ডেবিয়ান চিত্র থেকে কলো একটি সর্বনিম্ন ইনস্টল ইনস্টল করেছে। আমাকে স্থানীয়ভাবে ইনস্টল করার চেষ্টা করতে হবে এবং কোন সমস্যা আছে কিনা এবং (এটি অন্য কোনও ব্যক্তির ক্ষেত্রে ঘটবে না বলে মনে হচ্ছে), চলমান সিস্টেমের সাথে তুলনা শুরু করতে হবে।
/etc/bash.bashrc
এবং সমস্ত /etc/profile
এবং /etc/profile.d
ফাইলগুলি একটি পরিষ্কার ইনস্টল থেকে অপরিবর্তিত রয়েছে। আমি বাশ উত্স ( apt-get source bash
) ডাউনলোড করেছি ./configure
এবং উত্সটি খনন করার আগে সমস্যাটি সঙ্কুচিত করার চেষ্টা করার জন্য বিভিন্ন যুক্তি দিয়ে খেলছি ।
--disable-readline --enable-minimal-config --disable-job-control
বিয়োগের সাথে সমস্ত ডেবিয়ান প্যাচগুলি সংকলন করেছি , কোন ফাইলগুলি এটি আছে তা দেখার জন্য একটি স্ট্রেস চালালেন open
, সেই সমস্ত ফাইলের নাম পরিবর্তন করে আবার লগ ইন করলেন। একই সমস্যা। আমি বাশ নিজেই কোনও কনফিগারেশন পরিবর্তনগুলি অবশ্যই বাতিল করে দিয়েছি।
exec bash
হাতে হাতে থাকেন (তবে এটি আর লগইন শেল নয়) এটি কি এখনও খারাপ ব্যবহার করে? যদি না হয়, কীexec bash -l
(তাই এটা একটি লগইন শেল)? যদি তা হয়, তবে আপনার লগইন স্ক্রিপ্টগুলি (/etc/profile
/etc/profile.d/
~/.bash_profile
~/.profile
) এর সাথে কিছু একটা রয়েছে, তবে শেলটি কী না তা বলতে পারে তা অনুসন্ধান করার জন্য আপনাকে কী বলতে হবে তা আমি জানি নাSIGWINCH
।