আমি কীভাবে "কম" আউটপুট রঙ করব?


25

আমি যখন পেজার ছাড়াই কোনও প্রোগ্রাম চালাই (উদাহরণস্বরূপ grepবা ls), এর আউটপুট রঙিন হয়। তবে আমি যখন এটির আউটপুটটি এখানে পাইপিং চালাই তখন lessকোনও রঙ দেখানো হয় না।

উদাহরণস্বরূপ, এই আদেশটি রঙিন আউটপুট আউটপুট করে:

grep -r something

কিন্তু এটি না:

grep -r something | less

কেন? আমি কীভাবে রংগুলি দেখতে পারি less?


5
grep --color=always "search string" * | less -Rতবে আমি mostআজকাল পরিবর্তে ব্যবহার করার প্রবণতা রাখি lessALSO : gnu.org/software/src-highlite হ'ল একটি রঙ হাইলাইটার (কম কাজও খুব বেশি)
রিনজউইন্ড

@ আলেক্স আপনি ইনস্টল করেছেন python-pygments?
সৌরভসি

@ সৌরভ নং আমি এটি ইনস্টল করি নি
মোহাম্মদ রেজা রেজওয়ানি

@ এলেস আমাকে অবহেলা করছে আমরা? >: - ডি
রিনজুইন্ড

উত্তর:


36

এখানে দুটি সমস্যা রয়েছে:

  • 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 ();

1
আমার 100k জন্য আপনাকে সমর্থন করার জন্য আজকের আমার শেষ উত্সাহ (সীমাতে পৌঁছে)। তবে আমি এবং রিনজউইন্ডের যখন কেক হয় তখন চাই।
হাইট্রোমো

আমি নাম সহ একটি প্রোগ্রাম ডাউনলোড করেছি ack-grep। যখন ack-grep foo টাইপ করুন, এটি সমস্ত উপ ডিরেক্টরিতে ফু-র অনুসন্ধান করবে o সুতরাং আমি এসি-গ্রেপ ফোও করেছি | কম, এবং রং চলে গেছে। তবে মনে হয় এই প্রোগ্রামটি "- রঙ = সর্বদা" সমর্থন করে না, যাই হোক না কেন সহায়তার জন্য ধন্যবাদ
মোহাম্মদ রেজা রেজওয়ানি

1
@alex ACK টি --color: যুক্তিack-grep -i select --color | less -R
অলি

@ অলি ......... ওহে আমার .....শ্বর ........ আমি কেবল আপনার জ্ঞান এবং সাহায্য এবং লিনাক্সের শক্তি সম্পর্কে বলতে পারি
মোহাম্মদ রেজা রেজওয়ানি

1
@ বি 1 কে মিউজিক আমি সম্মত। আমি এতটা সম্মত হয়েছি যে কীভাবে এটি কার্যকর হয় এবং উত্তরটি আপডেট করে I আপনি -Cআর্গুমেন্ট দিয়ে কলামগুলি জোর করতে পারেন ।
অলি

2

আপনি যদি lessআরও সাধারণভাবে রঙগুলিতে আগ্রহী হন তবে আপনি এটি দেখতে চাইতে পারেন lesspipe.sh। উদাহরণস্বরূপ দেখুন, http://freecode.com/projects/lesspipe

কম পাইপ.শ হ'ল পেজের জন্য কম ইনপুট ফিল্টার হিসাবে কম মানুষের পৃষ্ঠাতে বর্ণিত। স্ক্রিপ্টটি একটি ksh- সামঞ্জস্যপূর্ণ শেলের অধীনে চলে (যেমন বাশ, zsh) এবং বাইনারি সামগ্রী, সংকুচিত ফাইল, সংরক্ষণাগার এবং সংরক্ষণাগারে থাকা ফাইলগুলির সাথে ফাইলগুলি দেখার জন্য আপনাকে কম ব্যবহার করতে দেয়।

এটি শেল স্ক্রিপ্টগুলি, পার্ল স্ক্রিপ্টগুলি ইত্যাদি কোনও পাঠ্য সম্পাদক হিসাবে একইভাবে রঙিন করবে, তবে রঙিনকরণের জন্য কোনও "প্রিপ্রসেসিং" প্রোগ্রাম ব্যবহার না করেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.