এখানে দুটি সমস্যা রয়েছে:
lsরঙ সমর্থন সম্পর্কে স্বতঃ-সনাক্তকরণের মতো কমান্ডগুলি পাইপগুলি থেকে সমর্থন খুঁজে পায় না
less ডিফল্টরূপে কেবল রঙ কোডগুলি প্রদর্শন করতে সেট করা আছে।
উভয়কেই পরাভূত করা যায় তবে এটি খানিকটা আড়ষ্ট:
ls --color=always | less -R
এটি lsনির্দিষ্ট নয় । রঙ সমর্থন করে এমন অনেক কমান্ডের ওভাররাইড যুক্তিও রয়েছে।
আরও কিছুটা গভীরতর উত্তর হ'ল lsএটির STDOUT একটি আসল টার্মিনালের অন্তর্ভুক্ত কিনা তা যাচাই করে। যখন আপনি চারপাশে জিনিসগুলি পাইপ করেন, STDOUT পরবর্তী কমান্ডের STDIN এ সেট করা হয়।
সোর্স কোডে আপনি এটিls কাজ করে দেখতে পারেন । isattyপরিস্থিতি কী তা বোঝার জন্য এটি কমান্ডটি (একটি মূল পসিক্স ইন্টারফেস) ব্যবহার করছে:
ডিফল্টরূপে রঙগুলি রয়েছে:
print_with_color = (i == color_always
|| (i == color_if_tty
&& isatty (STDOUT_FILENO)));
আমরা কি একাধিক কলামে আউটপুট দেওয়ার চেষ্টা করি:
if (format == long_format)
format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
//...
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
set_quoting_style (NULL, shell_escape_quoting_style);
qmark_funny_chars = true;
}
else
{
format = one_per_line;
qmark_funny_chars = false;
}
grepএকটি খুব অনুরূপ কাজ করে, যদি না স্পষ্টভাবে ওভাররাইড করা হয়, তবে এটি রঙিন সমর্থন সনাক্ত করবে, এর সাথে isatty:
color_option = isatty (STDOUT_FILENO) && should_colorize ();
grep --color=always "search string" * | less -Rতবে আমিmostআজকাল পরিবর্তে ব্যবহার করার প্রবণতা রাখিless। ALSO : gnu.org/software/src-highlite হ'ল একটি রঙ হাইলাইটার (কম কাজও খুব বেশি)