কিছু পরিবেশ পরিবর্তনশীল আছে?
হ্যাঁ. এটি TERMপরিবেশে পরিবর্তনশীল। এটি কারণ যে প্রক্রিয়াটির অংশ হিসাবে বেশ কয়েকটি জিনিস ব্যবহৃত হয়।
এখানে সাধারণীকরণ করা কঠিন, কারণ সমস্ত প্রোগ্রামই একক সিদ্ধান্তের ফ্লোচার্টের সাথে একমত নয়। প্রকৃতপক্ষে grepএম.কিটের উত্তরে উল্লিখিত জিএনইউ অপ্রত্যাশিত ফলাফলের সাথে কিছুটা অস্বাভাবিক সিদ্ধান্ত প্রক্রিয়া ব্যবহার করে এমন একজন আউটলারের একটি ভাল উদাহরণ। খুব সাধারণ পদে, অতএব:
- দ্বারা নির্ধারিত হিসাবে স্ট্যান্ডার্ড আউটপুট অবশ্যই টার্মিনাল ডিভাইস হতে হবে
isatty()।
- প্রোগ্রামটি অবশ্যই টার্মক্যাপ / টার্মিনো ডাটাবেসে টার্মিনাল ধরণের রেকর্ড সন্ধান করতে সক্ষম হবে।
- সুতরাং সুতরাং সেখানে উচিত হবে সন্ধান করার একটি টার্মিনাল প্রকার।
TERMএনভায়রনমেন্ট ভেরিয়েবল থাকা আবশ্যক এবং তার মান একটি ডাটাবেস রেকর্ড মিলতে হবে।
- সুতরাং অবশ্যই একটি টার্মিনো / টার্মক্যাপ ডাটাবেস থাকতে হবে। সাবসিস্টেমের কিছু বাস্তবায়নের ক্ষেত্রে,
TERMCAPপরিবেশ পরিবর্তনশীল ব্যবহার করে টার্মক্যাপ ডাটাবেসের অবস্থান নির্দিষ্ট করা যেতে পারে । সুতরাং কিছু বাস্তবায়নের ক্ষেত্রে দ্বিতীয় পরিবেশের পরিবর্তনশীল রয়েছে।
- টার্মক্যাপ / টার্মিনো রেকর্ডটিতে অবশ্যই বলা উচিত যে টার্মিনাল ধরণের রং সমর্থন করে।
max_colorsটার্মিনফোতে একটি ক্ষেত্র আছে। এটি টার্মিনাল ধরণের জন্য সেট করা নেই যা প্রকৃতপক্ষে রঙের ক্ষমতাগুলি নয়। প্রকৃতপক্ষে, একটি টার্মিনো কনভেনশন রয়েছে যে প্রতিটি কলুষিত টার্মিনাল টাইপের জন্য আরও একটি রেকর্ড থাকে -mবা -monoনামের সাথে সংযোজন করা হয় যা কোনও রঙের ক্ষমতা বলে না।
- টার্মক্যাপ / টার্মিনো রেকর্ড অবশ্যই প্রোগ্রামের রঙ পরিবর্তন করার উপায় সরবরাহ করবে। আছে
set_a_foregroundএবং set_a_backgroundterminfo ক্ষেত্র।
এটি কেবল চেকিংয়ের চেয়ে কিছুটা জটিল isatty()। এটি বেশ কয়েকটি বিষয় আরও জটিল করে তুলেছে :
- কিছু অ্যাপ্লিকেশন কমান্ড-লাইন বিকল্পগুলি বা কনফিগারেশন পতাকাগুলি যুক্ত করে যা চেকটিকে ওভাররাইড করে
isatty(), যাতে প্রোগ্রামটি সর্বদা বা কখনই ধরে না নেয় যে এটির আউটপুট হিসাবে এটি একটি (শ্রদ্ধেয়) টার্মিনাল রয়েছে। উদাহরন স্বরূপ:
- গনুহ
lsহয়েছে --colorকম্যান্ড-লাইন বিকল্প।
- বিএসডি (এর অনুপস্থিতির অর্থ কখনই নয় ) এবং (এর উপস্থিতিটির অর্থ সর্বদা ) পরিবেশের ভেরিয়েবলগুলি
lsদেখায় এবং কমান্ড-লাইন বিকল্পটিও খেলাধুলা করে ।CLICOLORCLICOLOR_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 আশা করে অবিলম্বে লাইন মোড়ানো , এবং তার রঙ্গিন আউটপুট গোলমাল।
রঙিন আউটপুট কোনও সাধারণ জিনিস নয়।
আরও পড়া