কিছু পরিবেশ পরিবর্তনশীল আছে?
হ্যাঁ. এটি TERM
পরিবেশে পরিবর্তনশীল। এটি কারণ যে প্রক্রিয়াটির অংশ হিসাবে বেশ কয়েকটি জিনিস ব্যবহৃত হয়।
এখানে সাধারণীকরণ করা কঠিন, কারণ সমস্ত প্রোগ্রামই একক সিদ্ধান্তের ফ্লোচার্টের সাথে একমত নয়। প্রকৃতপক্ষে grep
এম.কিটের উত্তরে উল্লিখিত জিএনইউ অপ্রত্যাশিত ফলাফলের সাথে কিছুটা অস্বাভাবিক সিদ্ধান্ত প্রক্রিয়া ব্যবহার করে এমন একজন আউটলারের একটি ভাল উদাহরণ। খুব সাধারণ পদে, অতএব:
- দ্বারা নির্ধারিত হিসাবে স্ট্যান্ডার্ড আউটপুট অবশ্যই টার্মিনাল ডিভাইস হতে হবে
isatty()
।
- প্রোগ্রামটি অবশ্যই টার্মক্যাপ / টার্মিনো ডাটাবেসে টার্মিনাল ধরণের রেকর্ড সন্ধান করতে সক্ষম হবে।
- সুতরাং সুতরাং সেখানে উচিত হবে সন্ধান করার একটি টার্মিনাল প্রকার।
TERM
এনভায়রনমেন্ট ভেরিয়েবল থাকা আবশ্যক এবং তার মান একটি ডাটাবেস রেকর্ড মিলতে হবে।
- সুতরাং অবশ্যই একটি টার্মিনো / টার্মক্যাপ ডাটাবেস থাকতে হবে। সাবসিস্টেমের কিছু বাস্তবায়নের ক্ষেত্রে,
TERMCAP
পরিবেশ পরিবর্তনশীল ব্যবহার করে টার্মক্যাপ ডাটাবেসের অবস্থান নির্দিষ্ট করা যেতে পারে । সুতরাং কিছু বাস্তবায়নের ক্ষেত্রে দ্বিতীয় পরিবেশের পরিবর্তনশীল রয়েছে।
- টার্মক্যাপ / টার্মিনো রেকর্ডটিতে অবশ্যই বলা উচিত যে টার্মিনাল ধরণের রং সমর্থন করে।
max_colors
টার্মিনফোতে একটি ক্ষেত্র আছে। এটি টার্মিনাল ধরণের জন্য সেট করা নেই যা প্রকৃতপক্ষে রঙের ক্ষমতাগুলি নয়। প্রকৃতপক্ষে, একটি টার্মিনো কনভেনশন রয়েছে যে প্রতিটি কলুষিত টার্মিনাল টাইপের জন্য আরও একটি রেকর্ড থাকে -m
বা -mono
নামের সাথে সংযোজন করা হয় যা কোনও রঙের ক্ষমতা বলে না।
- টার্মক্যাপ / টার্মিনো রেকর্ড অবশ্যই প্রোগ্রামের রঙ পরিবর্তন করার উপায় সরবরাহ করবে। আছে
set_a_foreground
এবং set_a_background
terminfo ক্ষেত্র।
এটি কেবল চেকিংয়ের চেয়ে কিছুটা জটিল isatty()
। এটি বেশ কয়েকটি বিষয় আরও জটিল করে তুলেছে :
- কিছু অ্যাপ্লিকেশন কমান্ড-লাইন বিকল্পগুলি বা কনফিগারেশন পতাকাগুলি যুক্ত করে যা চেকটিকে ওভাররাইড করে
isatty()
, যাতে প্রোগ্রামটি সর্বদা বা কখনই ধরে না নেয় যে এটির আউটপুট হিসাবে এটি একটি (শ্রদ্ধেয়) টার্মিনাল রয়েছে। উদাহরন স্বরূপ:
- গনুহ
ls
হয়েছে --color
কম্যান্ড-লাইন বিকল্প।
- বিএসডি (এর অনুপস্থিতির অর্থ কখনই নয় ) এবং (এর উপস্থিতিটির অর্থ সর্বদা ) পরিবেশের ভেরিয়েবলগুলি
ls
দেখায় এবং কমান্ড-লাইন বিকল্পটিও খেলাধুলা করে ।CLICOLOR
CLICOLOR_FORCE
-G
- কিছু অ্যাপ্লিকেশন টার্মক্যাপ / টার্মিনফো ব্যবহার করে না এবং এর মানটির প্রতি কঠোর প্রতিক্রিয়া জানায়
TERM
।
- সমস্ত টার্মিনালগুলি ECMA-48 বা আইএসও 8613-6 এসজিআর সিকোয়েন্সগুলি ব্যবহার করে না, যা রঙ পরিবর্তনের জন্য কিছুটা ভুল-নাম দেওয়া "এএনএসআই এস্কেপ সিকোয়েন্সস" রয়েছে। টার্মক্যাপ / টার্মিনো মেকানিজম প্রকৃতপক্ষে সঠিক নিয়ন্ত্রণের ক্রমগুলির সরাসরি জ্ঞান থেকে অ্যাপ্লিকেশনগুলি অন্তরক করার জন্য তৈরি করা হয়েছে। ( তদ্ব্যতীত , এখানে একটি যুক্তি রয়েছে যে কেউ আইএসও 8613-6 এসজিআর সিকোয়েন্স ব্যবহার করে না , কারণ প্রত্যেকে আরজিবি রঙ এসজিআর সিকোয়েন্সগুলির জন্য ডিলিমিটার হিসাবে আধা-কোলন ব্যবহার করার বাগের সাথে সম্মত হয় The মানকটি আসলে কোলন নির্দিষ্ট করে)
উল্লিখিত হিসাবে, জিএনইউ grep
প্রকৃতপক্ষে এই অতিরিক্ত কিছু জটিলতা প্রদর্শন করে। এটি টার্মক্যাপ / টার্মিনফোর সাথে পরামর্শ করে না, নির্গমন করার জন্য কন্ট্রোল সিকোয়েন্সগুলিকে শক্তিশালী করে এবং TERM
পরিবেশের পরিবর্তনশীলটির প্রতিক্রিয়াটিকে হার্ডওয়ার করে ।
এটি লিনাক্স / ইউনিক্স বন্দর এই কোড আছে , যা colourization সম্ভব শুধুমাত্র যখন TERM
এনভায়রনমেন্ট ভেরিয়েবল বিদ্যমান এবং এর মান hardwired নাম সাথে মেলে না dumb
:
int- এ
should_colorize (অকার্যকর)
{
চর কনস্ট * টি = গেটেনভ ("টিআরএম");
t && strcmp (t, "dumb")! = 0;
}
সুতরাং আপনার যদি TERM
হয় তবে xterm-mono
জিএনইউ grep
রঙ নির্গমন করার সিদ্ধান্ত নেবে, যদিও অন্যান্য প্রোগ্রামগুলি যেমন vim
তা করবে না।
এর উইন 32 পোর্টটিতে এই কোডটি রয়েছে , যা TERM
পরিবেশের পরিবর্তনশীল উপস্থিত না থাকলে বা যখন এটি উপস্থিত থাকে এবং এর মান হার্ডওয়ার্ড নামের সাথে মেলে না, তখন কলরাইজেশন সক্ষম করে dumb
:
int- এ
should_colorize (অকার্যকর)
{
চর কনস্ট * টি = গেটেনভ ("টিআরএম");
ফিরে! (t && strcmp (t, "বোবা") == 0);
}
গনুহ grep
রঙ দিয়ে এর সমস্যার
গনুহ grep
এর colourization আসলে কুখ্যাত। কারণ এটি টার্মিনাল আউটপুট নির্মাণের পক্ষে যথাযথ কাজ করে না, বরং কেবলমাত্র শক্ত প্রতিশ্রুতিতে এর আউটপুটে বিভিন্ন পয়েন্টে কয়েকটি হার্ডওয়ার্ড কন্ট্রোল সিকোয়েন্সগুলিকে দোষ দেয় যে এটি যথেষ্ট ভাল, এটি নির্দিষ্ট পরিস্থিতিতে ভুল আউটপুট প্রদর্শন করে।
এই পরিস্থিতিতে এটি যখন টার্মিনালের ডান হাতের মার্জিনে থাকা কোনও কিছুকে কৌলাইজ করতে হয়। প্রোগ্রামগুলি যে টার্মিনাল আউটপুট সঠিকভাবে করে তাদের স্বয়ংক্রিয় ডান মার্জিনের জন্য অ্যাকাউন্ট করতে হয়। টার্মিনালটি সেগুলি না রাখার সামান্য সম্ভাবনা ছাড়াও (যেমন auto_right_margin
টার্মিনোতে ক্ষেত্র), টার্মিনালগুলির আচরণগুলির মধ্যে স্বয়ংক্রিয় ডান মার্জিন থাকে এমন লাইন র্যাপের অপেক্ষার ডিসি ভিটি নজির অনুসরণ করে । গনুহ grep
এই হিসাব না, naively আশা করে অবিলম্বে লাইন মোড়ানো , এবং তার রঙ্গিন আউটপুট গোলমাল।
রঙিন আউটপুট কোনও সাধারণ জিনিস নয়।
আরও পড়া