গ্রেপ সুইচ - রঙ = অটো কী করে?


8

সুইচটির autoবিকল্প হিসাবে গ্রিপতে কী প্রভাব ফেলবে --color? গ্রেপ কখন মিলে যাওয়া স্ট্রিংগুলি রঙ করার সিদ্ধান্ত নেয় এবং কখন তা করে না?

উত্তর:


12

প্রত্যাশিত আচরণ

এর সাথে --color=auto, গ্রেপ মেলানো স্ট্রিংগুলি হাইলাইট করবে যদি (এবং কেবলমাত্র) আউটপুটটি সরাসরি টার্মিনালে লিখিত হয় এবং বলে যে টার্মিনাল রঙিন আউটপুট প্রদর্শন করতে সক্ষম।

সাধারণত, --color=autoআপনি চান কি। যদি, উদাহরণস্বরূপ, আপনি কোনও ইউআরএল মেলানোর জন্য গ্রেপ ব্যবহার করেন এবং এটিকে ওয়াজেটে পাইপ করেন \e[1;31mhttp://...তবে আসল ইউআরএলের পরিবর্তে উইজেট দেখতে পাবেন (এবং এটির উপরে চাপ দিন)।

নিম্নলিখিত আদেশগুলি রঙিন আউটপুট হতে হবে:

echo Super User | grep --color=auto Super
echo Super User | grep --color=always Super | cat

এই আদেশটি অবশ্য করা উচিত নয়:

echo Super User | grep --color=auto Super | cat

এই আচরণের সাথে কোনও অসঙ্গতি একটি বাগ হিসাবে বিবেচনা করা উচিত।

সোর্স কোড

সাথে --color=auto, উইন্ডোজ সংস্করণের জন্য সর্বশেষ গ্রেপ (2.5.4) - পাশাপাশি মূল 2.5.4 এর উপর ভিত্তি করে - আউটপুটটি রঙ করুন যদি এবং শুধুমাত্র শর্ত থাকে

isatty(STDOUT_FILENO) && getenv("TERM") && strcmp(getenv("TERM"), "dumb")

সত্য, অর্থাত্‍ যদি এবং কেবলমাত্র যদি আউটপুট টার্মিনালে লেখা হয়, পরিবেশের পরিবর্তনশীলTERM সংজ্ঞায়িত হয় এবং টার্মিনাল বোবা হয় না ।

এটি উইন্ডোজের অধীনে পছন্দসই আচরণ তৈরি করে না, যেহেতু TERMসাধারণত সংজ্ঞায়িত হয় না। এই সমস্যার সহজ সমাধান হ'ল TERM=windowsনিয়ন্ত্রণ প্যানেলে সেটিংস স্থাপন করা ।

গ্রেপ (2.14) এর সর্বশেষতম সংস্করণটি যদি শর্তটি থাকে এবং শুধুমাত্র যদি আউটপুটটিকে রঙ করে এই সমস্যাটিকে ঠিক করে দেয়

isatty(STDOUT_FILENO) && should_colorize()

সত্য, যেখানে should_colorize()পসিক্স এবং উইন 32 এর জন্য আলাদাভাবে সংজ্ঞায়িত করা হয়েছে:

পূর্বেরদের জন্য, শর্তটি 2.5.4 এর একটির সমান; পরবর্তীকালের জন্য, পরিবেশগত পরিবর্তনশীল TERMসেট করতে হবে না (এটি কেবল হতে পারে না dumb)।


এটি টার্মিনালে লিখেছে কিনা তা কীভাবে জানতে পারে?
ট্রোলজেন

1
তার জন্য একটি সি ফাংশন আছে। আপনি হেডার ফাইল অন্তর্ভুক্ত করেন, তাহলে sdgstd.h, istty(stdout)ফেরৎ 0যদি আউটপুট একটি ফাইল থেকে আপনাকে পুনঃনির্দেশিত করা হয়।
ডেনিস

জানালা পোর্ট আমি পরীক্ষা grepএবং lessGnuWin প্রকল্প থেকে (gnuwin32.sourceforge.net)। ইউটিলিটি cmd.exeসহ উন্নত করা হয় ansiconless --color=autoপ্রত্যাশিত হিসাবে কাজ করে: কোনও পুনর্নির্দেশ প্রয়োগ না করা হয় এবং আউটপুট পুনঃনির্দেশিত হয় না যখন রঙ ব্যবহার করে। তবে grep --color=autoউভয় ক্ষেত্রেই পালানোর সিকোয়েন্সগুলি মুদ্রণ করে না।
ট্রোলজেন

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

এটি তখন GnuWin32 এর গ্রেপের একটি বাগ। উবুন্টুতে, আমার উত্তরে আমি যেমন বর্ণনা করেছি তেমন আচরণ করে। উভয়ই একই উত্স কোড থেকে উদ্ভূত হওয়ার সময়, আপনি অন্য প্ল্যাটফর্মটিতে সংকলন করতে যাচ্ছেন তবে সর্বদা ছোটখাট সামঞ্জস্য হয়। এছাড়াও, মনে রাখবেন যে GnuWin32 এর গ্রাপের বর্তমান সংস্করণটি 2.5.4। উবুন্টুতে সর্বশেষতম সংস্করণটি 2.12।
ডেনিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.