একটি রঙ ফিল্টার মাধ্যমে একটি কমান্ড পাইপিং


13

ইউনিক্সে এর মতো কিছু রয়েছে কি?

$ echo "this should show in red" | red
$ echo "this should show in green" | green
$ echo "this should show in blue" | blue

এখানে আমি আক্ষরিক রঙের কোড পাঠ্যটি আসার জন্য বোঝাতে চাইছি না (উদাহরণস্বরূপ কোনও ফাইলে আটকানো হবে)। আমি টেক্সটটি প্রকৃতপক্ষে সেই রঙের মতো টার্মিনালে প্রদর্শিত হবে I এটা কি সম্ভব?

উত্তর:


14

এখানে একটি ছোট স্ক্রিপ্ট যা কেবল এটি করে। colorএটি আপনার ডিরেক্টরিতে যেমন সংরক্ষণ করুন $PATH(উদাহরণস্বরূপ, এটি ~/binযদি আপনার হয় $PATH):

#!/usr/bin/env perl

use strict;
use warnings;
use Term::ANSIColor; 

my $color=shift;
while (<>) {
    print color("$color").$_.color("reset");
} 

তারপরে, স্ক্রিপ্টের মাধ্যমে আপনার পাঠ্যটি .মেলানোর প্যাটার্ন হিসাবে এবং একটি রঙ নির্দিষ্ট করে দিন:

স্ক্রিপ্ট চলমান একটি টার্মিনালের স্ক্রিনশট

সমর্থিত রঙগুলি আপনার টার্মিনালের সক্ষমতার উপর নির্ভর করে। আরও বিশদের জন্য প্যাকেজের ডকুমেন্টেশন দেখুন Term::ANSIColor


কোথাও প্রবেশের জন্য বৈধ যে রঙগুলির একটি তালিকা আছে?
জর্জ

@ জর্জি যা আপনার সেটআপের উপর নির্ভর করে। আপনি একটি আরজিবি সক্ষম টার্মিনাল থাকে, তাহলে আপনি এমনকি জিনিষ পছন্দ ব্যবহার করতে পারেন rgb001, rgb123ইত্যাদি দেখুন perldoc.perl.org/Term/ANSIColor.html#Supported-Colors আরো বিস্তারিত জানার জন্য।
টেরডন

23

আপনি এটির tputজন্য ব্যবহার করবেন:

tput setaf 1
echo This is red
tput sgr0
echo This is back to normal

এটি একটি পাইপ তৈরি করতে ব্যবহার করা যেতে পারে:

red() { tput setaf 1; cat; tput sgr0; }
echo This is red | red

প্রাথমিক রঙগুলি যথাক্রমে কালো (0), লাল (1), সবুজ, হলুদ, নীল, ম্যাজেন্টা, সায়ান এবং সাদা (7)। আপনি terminfo(5)ম্যানপেজে সমস্ত বিবরণ পাবেন ।



1

(মতামত হিসাবে আলোচিত হিসাবে, যদি এটি থাকে তবে পরিবর্তে ব্যবহারtput করুন)

বোর্ন শেল এবং echo(অন্তর্নির্মিত) কমান্ড ব্যবহার করা যা এএনএসআই পলায়ন বিকল্পের \eসাহায্যে বোঝে -e:

black()  { IFS= ; while read -r line; do echo -e '\e[30m'$line'\e[0m'; done; }
red()    { IFS= ; while read -r line; do echo -e '\e[31m'$line'\e[0m'; done; }
green()  { IFS= ; while read -r line; do echo -e '\e[32m'$line'\e[0m'; done; }
yellow() { IFS= ; while read -r line; do echo -e '\e[33m'$line'\e[0m'; done; }
blue()   { IFS= ; while read -r line; do echo -e '\e[34m'$line'\e[0m'; done; }
purple() { IFS= ; while read -r line; do echo -e '\e[35m'$line'\e[0m'; done; }
cyan()   { IFS= ; while read -r line; do echo -e '\e[36m'$line'\e[0m'; done; }
white()  { IFS= ; while read -r line; do echo -e '\e[37m'$line'\e[0m'; done; }

echo '    foo\n    bar' | red

বা, আরও জেনেরিক শেল স্ক্রিপ্ট (বলুন /usr/local/bin/colorize):

#!/bin/sh

usage() {
    echo 'usage:' >&2
    echo '  some-command | colorize {black, red, green, yellow, blue, purple, cyan, white}' >&2
    exit 1
}

[ -z "$1" ] && usage

case $1 in
    black)  color='\e[30m' ;;
    red)    color='\e[31m' ;;
    green)  color='\e[32m' ;;
    yellow) color='\e[33m' ;;
    blue)   color='\e[34m' ;;
    purple) color='\e[35m' ;;
    cyan)   color='\e[36m' ;;
    white)  color='\e[36m' ;;
    *) usage ;;
esac

IFS=
while read -r line; do
    echo -e $color$line'\e[0m'
done

IFS=হোয়াইটস্পেস ট্রিমিং প্রতিরোধের জন্য প্রয়োজনীয় ( বিশদগুলির জন্য পসিক্স দেখুন)।

আইএফএস কীভাবে কাজ করে


আমি ব্যবহার পছন্দ করতে পরামর্শ tput
লিনাক্সসিকিউরিটিফ্রাক 11

এটি সম্পূর্ণ নন-পোর্টেবল সমাধান। মানে আপনার পসিক্স মেনে চলা উচিত।
লিনাক্সসিকিউরিটিফ্রাক

1
অবশ্যই, যদি আমরা পারতাম। এটি এম্বেড থাকা সিস্টেম বা ব্যস্তবক্সের মতো উদ্ধার পরিবেশে ব্যবহারের উদ্দেশ্যে। আমি এই উত্তরটি লেখার সিদ্ধান্ত নিয়েছি কারণ আমি বিশ্বাস করি যে এই কোড স্নিপেটগুলি কিছু পরিস্থিতিতে কার্যকর - কমপক্ষে ব্যস্তবক্স ব্যবহারকারীদের এবং আমার জন্য, যিনি কেবল একটি এমবেডেড পরিবেশে কেবল শেলের বিল্ট-ইন কমান্ড সহ রঙগুলি আউটপুট দিতে হয়েছিল।
ওয়াটাশ

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