বাশ রঙ ছাপতে পারে কিনা তা কীভাবে পরীক্ষা করবেন


62

আমি জানতে চাই যে আমার প্রোগ্রামটি রঙগুলি ব্যবহার করে টার্মিনাল আউটপুট আউটপুট দিতে পারে কিনা তা পরীক্ষা করার কোনও উপায় আছে কিনা।

কমান্ড চালানো lessএবং রঙের সাহায্যে আউটপুট এমন একটি প্রোগ্রাম থেকে আউটপুট দেখে, আউটপুট যেমন ভুল প্রদর্শিত হয়

[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]

ধন্যবাদ



উত্তর:


68

ধারণাটি আমার অ্যাপ্লিকেশনটির জন্য প্রোগ্রামটি প্রিন্ট করতে না পারলে আউটপুটটি রঙ না করার জন্য জানায়, বলুন, ক্রোন জব থেকে কোনও ফাইলটিতে লগিং আউটপুট, রঙিন আউটপুট লগ করার দরকার নেই, তবে ম্যানুয়ালি চলাকালীন আমি দেখতে চাই আউটপুট রঙিন

আপনি কোন ভাষায় আপনার আবেদন লিখছেন?

স্বাভাবিক পদ্ধতিটি আউটপুট ডিভাইসটি tty কিনা তা যাচাই করা হয় এবং যদি তা হয় তবে এই ধরণের টার্মিনালটি রঙ সমর্থন করে কিনা তা পরীক্ষা করে দেখুন।

ইন bash, যে মত চেহারা হবে

# check if stdout is a terminal...
if test -t 1; then

    # see if it supports colors...
    ncolors=$(tput colors)

    if test -n "$ncolors" && test $ncolors -ge 8; then
        bold="$(tput bold)"
        underline="$(tput smul)"
        standout="$(tput smso)"
        normal="$(tput sgr0)"
        black="$(tput setaf 0)"
        red="$(tput setaf 1)"
        green="$(tput setaf 2)"
        yellow="$(tput setaf 3)"
        blue="$(tput setaf 4)"
        magenta="$(tput setaf 5)"
        cyan="$(tput setaf 6)"
        white="$(tput setaf 7)"
    fi
fi

echo "${red}error${normal}"
echo "${green}success${normal}"

echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.

সি তে, আপনাকে আরও অনেক বেশি টাইপ করতে হবে, তবে ইসটি এবং তালিকাভুক্ত ফাংশনগুলি ব্যবহার করে একই ফলাফল অর্জন করতে পারবেন man 3 terminfo


^^ যে ^^ ছিল ঠিক আমি কি খুঁজছিলাম। ধন্যবাদ।
টিম কেনেডি

টিপুট সম্পর্কে ইঙ্গিত দেওয়ার জন্য ধন্যবাদ। এটি একটি সত্যিই দুর্দান্ত উত্তর।
AmadeusDrZaius 4'15

24

এটি যথেষ্ট হওয়া উচিত:

$ tput colors

tpp রঙ বর্ণিত:

আপনি যদি ম্যানপেজটি দেখে থাকেন তবে আপনি এটি লক্ষ্য করবেন:

SYNOPSIS
       tput [-Ttype] capname [parms ... ]

এবং...

   capname
          indicates the capability from the terminfo database.  When term
          cap  support is compiled in, the termcap name for the capability
          is also accepted.

টার্মক্যাপটি টার্মিনো colorsডাটাবেসে রয়েছে, তাই আপনি এটি চাইতে পারেন। আপনার যদি শূন্য প্রস্থান স্থিতি থাকে তবে টার্মক্যাপটি সংকলিত হয় But তবে আপনার যদি কিছু মত থাকে:

$ tput unknowntermcap
tput: unknown terminfo capability 'unknowntermcap'
$ echo $?
4

এটি দেখায় যে অজানা-অবিচ্ছিন্ন অস্তিত্ব নেই। তাই এটা:

$ tput colors
8
$ echo $?
0

আপনার আদেশটি সঠিক ছিল তা দেখায়।

অন্যান্য দরকারী উপায়:

  • সি-তে, আপনি কেবল ব্যবহার করতে পারেন এবং এটি কোনও টিটিওয়াই কিনা তা দেখতে পারেন
  • এটি বোবা টার্মিনাল looking TERM ভেরিয়েবল কিনা তা দেখুন

চিয়ার্স


colorstputম্যান পেজে নথিভুক্ত করা হয়নি (!), সুতরাং আমি কি স্টাডাউটে একটি নম্বর> = 8 বা 0 এর একটি রিটার্ন কোড খুঁজছি?
l0b0

সুস্পষ্ট বলে মনে হলেও আপনার মন্তব্যটি দেখায় যে এটি তা নয়। আমি সেই তথ্যটি যুক্ত করছি (সংক্ষেপে, রঙগুলি
টার্মিনো

1
colorsসামর্থ্য মধ্যে নথিভুক্ত করা terminfo (5) । ব্যবহার পরীক্ষা করা tput -T dumb colors, tput -T vt220 colors, tput -T linux colors, tput -T xterm colorsপ্রস্তাব দেওয়া সাধারণ মান -1(কোন রঙ সমর্থন) এবং 8(8 রং)। নোট করুন যে আউটপুট ডিভাইসটি টার্মিনাল (যেমন [ -t 1 ]বা isatty) পরীক্ষা করার পরে এটি কেবল প্রযোজ্য ।
মাইকেল

নোট করুন যে tput colorsস্থানীয় টার্মিনাল ডাটাবেসটি টার্মিনালটির বিষয়ে কী চিন্তা করে। এটি টার্মিনালটি আসলে কী করতে পারে তার সাথে মিলও থাকতে পারে না, বিশেষত এমন টার্মিনাল ধরণের জন্য xtermযা বিভিন্ন রূপে আসে (কালো এবং সাদা থেকে 256 বর্ণ পর্যন্ত)।
গিলস

7

ধারণাটি আমার অ্যাপ্লিকেশনটির জন্য প্রোগ্রামটি প্রিন্ট করতে না পারলে আউটপুটটি রঙ না করার জন্য জানায়, বলুন, ক্রোন জব থেকে কোনও ফাইলটিতে লগিং আউটপুট, রঙিন আউটপুট লগ করার দরকার নেই, তবে ম্যানুয়ালি চলাকালীন আমি দেখতে চাই আউটপুট রঙিন।

এই ব্যবহারের ক্ষেত্রে, প্রোগ্রামগুলি সাধারণত কি করে (যেমন GNU ls বা GNU গ্রেপ সহ --color=auto) তাদের রঙগুলি যদি তাদের আউটপুটটি টার্মিনালে যায় এবং অন্যথায় কোনও রঙ হয় না। টার্মিনালগুলি যা এএনএসআই রঙ-পরিবর্তনের ক্রমগুলিকে সমর্থন করে না এটি যথেষ্ট বিরল যা তাদের ব্যবহারকারীদের ডিফল্ট পছন্দটিকে ওভাররাইড করার জন্য গ্রহণযোগ্য। যাই হোক না কেন, আপনার অ্যাপ্লিকেশনটিতে রঙ জোর করে বা বন্ধ করার বিকল্প রয়েছে তা নিশ্চিত করুন।

শেল স্ক্রিপ্টে, [ -t 1 ]স্ট্যান্ডার্ড আউটপুটটি টার্মিনাল কিনা তা পরীক্ষা করতে ব্যবহার করুন ।

# option processing has set $color to yes, no or auto
if [ $color = auto ]; then
  if [ -t 1 ]; then color=yes; else color=no; fi
fi

সিআইপি ব্যবহার করে একটি প্রোগ্রাম থেকে কল করুন isatty(1)

# option processing has set use_color to 0 for no, 1 for yes or 2 for auto
if (use_color == 2) use_color = isatty(1);

5

কমের মত কমান্ড চালানো এবং রঙের সাহায্যে আউটপুট প্রোগ্রাম থেকে আউটপুট তাকানো আউটপুট যেমন ভুল প্রদর্শিত হয়

[ESC [0; 32m0.052ESC [0 মিটার ESC [1; 32m2,816.00 কেবিইএসসি [0 মি]

ব্যবহার করার চেষ্টা করুন less --RAW-CONTROL-CHARS

এই উদাহরণে আমি লোগটোল ব্যবহার করছি , যা রঙগুলি ব্যবহার করে আউটপুট প্রিন্ট করে।

--আরআউ-নিয়ন্ত্রণ নিয়ন্ত্রণ-ছাড়াই:

$ head -20 /var/log/messages | logtool | less
ESC[0mESC[0;37mMar 20 11:43:52ESC[0mESC[1;36m host1ESC[0mESC[0;37m rsyslogd:ESC[0m ^GESC[0;31mlast message repeated 14 timesESC[0mESC[0m

--আরএআউট-নিয়ন্ত্রণ-চর (কল্পনা করুন এটি বেশ সুন্দর রঙের Also এছাড়াও, কেন এটি ^Gপ্রদর্শিত হচ্ছে তা আমি নিশ্চিত নই )):

$ head -20 /var/log/messages | logtool | less --RAW-CONTROL-CHARS
Mar 20 11:43:52 host1 rsyslogd: ^Glast message repeated 14 times

2

lessএএনএসআই পলায়নের ব্যাখ্যা না দেওয়ার জন্য এটিই দোষ হবে ; সন্ধান Rমধ্যে $LESSOPTS। সিস্টেমটি আপনার টার্মিনালটি রঙগুলি মোকাবেলা করতে পারে কিনা তা নির্ধারণ করার ক্ষেত্রে, এটি যে রঙকে সমর্থন করে তা tput colorsআউটপুট দেবে বা এটি রঙগুলি সমর্থন -1করে না। (দ্রষ্টব্য যে কয়েকটি টার্মিনালগুলি তাদের টার্মিনাল বিবরণ হিসাবে xtermপরিবর্তে ব্যবহার করতে পারে xterm-colorতবে রঙগুলি এখনও সমর্থন করে))


ধারণাটি আমার অ্যাপ্লিকেশনটির জন্য প্রোগ্রামটি প্রিন্ট করতে না পারলে আউটপুটটি রঙ না করার জন্য জানায়, বলুন, ক্রোন জব থেকে কোনও ফাইলটিতে লগিং আউটপুট, রঙিন আউটপুট লগ করার দরকার নেই, তবে ম্যানুয়ালি চলাকালীন আমি দেখতে চাই আউটপুট রঙিন।
অ্যাঞ্জেলো ভার্গাস

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