টার্মিনাল রঙ পালানোর ক্রমগুলি কি কোথাও ব্যাশের জন্য সংজ্ঞায়িত করা হয়েছে?


22

আমি ব্যাশ স্ক্রিপ্টিংয়ে প্রায়শই রঙ ব্যবহার করেছি (বেশিরভাগ CentOS এ) তবে তাদের ব্যবহারকে আরও দৃ make়তর করতে আমি রঙের মানগুলিতে ভেরিয়েবলগুলি পুনরায় সংজ্ঞা দিয়ে শেষ করি :

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

বা এছাড়াও সাথে tput:

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

আমি /etc/rc.d/init.dডিরেক্টরিটি গ্রেপ্তার করেছি কিন্তু সেখানে রঙ সংজ্ঞা সম্পর্কিত কোনও কিছুই পাইনি।

ইতিমধ্যে কি এরকম সংজ্ঞা রয়েছে? যদি না হয় তবে আমি এগুলি /etc/rc.d/init.dবলার জন্য একটি ফাইলে রাখব এবং এটি আমার স্ক্রিপ্টগুলিতে অন্তর্ভুক্ত করবো, কিছুটা পছন্দ করার মতো/etc/rc.d/init.d/functions


এগুলি নয়, \e[1;30mউদাহরণস্বরূপ, প্রযুক্তিগতভাবে ধূসর রঙের প্রতিনিধিত্ব করে না, বরং রঙ স্লট সাধারণত টার্মিনাল দ্বারা ধূসর হিসাবে প্রদর্শিত হয়। টার্মিনাল এমুলেটরগুলি প্রকৃত প্রদর্শনের রঙ পরিবর্তন করতে বিনামূল্যে, এবং প্রায়শই তাদের ব্যবহারকারী-কনফিগারযোগ্য বিকল্প হিসাবে তৈরি করে।
চিপনার

উত্তর:


36

আপনি যা জিজ্ঞাসা করছেন তাতে খেলতে বিভিন্ন দিক রয়েছে।

প্রথমত, ব্যাশ রঙগুলি সংজ্ঞায়িত করে না। প্রকৃতপক্ষে বাশের একেবারেই ধারণা নেই যে রঙগুলি এমনকি বিদ্যমান। সকল তা জানেন যে আপনি অক্ষর আউটপুট এটা বলা হয় \033[0;36m। আপনার টার্মিনাল এমুলেটর (এক্সটার্ম, জিনোম-টার্মিনাল, যাই হোক না কেন) এই অক্ষরগুলি গ্রহণ করে এবং "আমাকে সায়ানে আউটপুট শুরু করা দরকার" বোঝে।

সুতরাং এটি আপনার টার্মিনাল এমুলেটর যা রঙ বোঝে। আপনার টার্মিনাল এমুলেটর বুঝতে পারে যে \033[0;36mসায়ান, তবে অন্য একটি টার্মিনাল এমুলেটর সায়ানের জন্য সম্পূর্ণ আলাদা অক্ষর ব্যবহার করতে পারে (যদিও কোনও বুদ্ধিমান টার্মিনাল এমুলেটরটি স্ট্যান্ডার্ডকে তুচ্ছ করে এটি করতে পারে না)। এই কারণ tput। যখন আপনি চালাতে tput setaf 6, tputযে আউটপুট পালাবার কোড রঙ 6 (সায়ান) জন্য আপনার টার্মিনাল এর পালাবার কোড খোঁজা যাচ্ছে, এবং।
( কোড সম্পর্কিত আরও তথ্যের জন্য এই প্রশ্নটি দেখুন tput setaf)

এখন ফিরে যাও আপনি যেমন খেয়াল করেছেন, যখন আমি সায়ান রঙের কথা উল্লেখ করেছি তখন আমি ব্যবহার করছি \033[0;36m, না \[\033[0;36m\]। বর্গাকার বন্ধনীগুলি অনুপস্থিত ছিল। বর্গাকার বন্ধনীর উদ্দেশ্য হ'ল প্রম্পটে এস্কেপ কোডগুলি (রঙ) ব্যবহার করার সময়, বাশকে জানতে হবে কোন অক্ষরগুলি মুদ্রণবিহীন (শূন্য-প্রস্থ, আসলে কিছুই দেখায় না)। এইভাবে আপনি মুদ্রণ-বিহীন অক্ষরগুলিকে আবদ্ধ করেন \[ \]। আপনি যদি এই অক্ষরগুলি অপসারণ করেন তবে প্রথমে সবকিছু ঠিকঠাক কাজ হতে পারে তবে আপনার কমান্ড টার্মিনাল প্রস্থকে ছাড়িয়ে গেলে আপনি সমস্ত ধরণের অদ্ভুততার মধ্যে চলে যেতে শুরু করবেন। এটি কারণ টাইপ করার সময়, বাশকে জানতে হবে কমান্ডটি পরবর্তী লাইনে কখন আবৃত হবে। এটি করতে, এটি প্রম্পটের প্রস্থ এবং তারপরে আপনি কত টাইপ করেছেন তার প্রস্থ গণনা করে।

আরেকটি নোট, সম্পর্কে tputCYAN="\[\033[0;36m\]"হয় না একই জিনিস CYAN="$(tput setaf 6)"। যেমনটি আমরা কেবল আলোচনা করেছি, বর্গাকার বন্ধনীগুলি ব্যাশের সাথে প্রাসঙ্গিক এবং tputএটি কেবলমাত্র টার্মিনাল এস্কেপ কোডগুলি আউটপুট দিতে চলেছে।

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

এত দীর্ঘ গল্প সংক্ষিপ্ত, আপনি সম্ভবত এর মতো কিছু সংজ্ঞা দিতে চান:

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

তারপরে Ctrl+ Alt+ দিয়ে একটি আসল টার্মিনালে লগ ইন করার পরে আমি কীভাবে রঙগুলি দেখতে পাবো F1?
সার্জ Stroobandt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.