প্রসঙ্গ এবং প্রশ্ন
টার্মিনাল এবং শেল পরিবেশকে রঙিন করার বিভিন্ন উপায় রয়েছে । যেমন পৃথক আদেশ, আউটপুট ls
এবং grep
, এছাড়াও রঙীন করা যেতে পারে। সরাসরি সম্পর্কিত নয় তবে আকর্ষণীয় তবুও কনসোলে মিডিয়া প্লে করার ধারণাটি তবে এটি উইন্ডোটিং সিস্টেমের শীর্ষে কিছু ফ্রেমওয়ার্ক (গ্রন্থাগার) এর উপর নির্ভর করে। নিম্নলিখিত প্রশ্নটি সম্পূর্ণ bash
শেল এবং লিনাক্স টার্মিনাল ফ্রেমওয়ার্ক এবং এর আন্ডারপাইনগুলিতে এর প্রয়োগের জন্য প্রস্তুত ge
দয়া করে 2D গেমের একটি দৃশ্যের ASCII "রেন্ডারিংস" এর নীচের পূর্ণাঙ্গতা বিবেচনা করুন :
এগুলি এলোমেলোভাবে উত্পন্ন দৃশ্য নয়। আমি যে সমস্ত বিভাগগুলি বেছে নিয়েছি সেগুলিতে এমন কোনও গেম থেকে "তৃণভূমি" ভূখণ্ডের কিছু গাছ (গাছ, গুল্ম এবং গুল্ম, ফুল, ঘাস ইত্যাদি) চিত্রিত করা হয়েছে যা এই জাতীয় সামগ্রীর প্রতিনিধিত্ব করতে ASCII অক্ষর ব্যবহার করে। সর্বশেষ 4 টি দৃশ্যের মাধ্যমে ব্যবহারকারী তৈরি টাইলসেটগুলি মূলত রঙের চশমাযুক্ত ASCII অক্ষরের একটি পুনর্নির্মাণ (যেমন বিশদ বিবরণ তুচ্ছ - এটি ভিজ্যুয়াল শর্তে আমি এখানে যা অর্জন করতে চাইছি তার জন্য ভিজ্যুয়াল অনুপ্রেরণা বলেই যথেষ্ট এবং " প্যাটার্ন ")।
মোটেজটি শেয়ারের সেই দৃশ্যগুলির সাধারণ বৈশিষ্ট্যগুলি হ'ল:
- সর্বাধিক 5-6 টি ভিন্ন ভিন্ন ASCII অক্ষর (কমা, উদ্ধৃতি চিহ্ন এবং কয়েকটি অন্যান্য)
- 2-4 রঙ ব্যবহৃত
- অক্ষর জন্য
- কিছু ক্ষেত্রে চরিত্রের ব্যাকগ্রাউন্ডের জন্য - সর্বশেষ উদাহরণটি এমন একটি প্যাটার্ন তৈরির জন্য রঙিন শেডের ব্যবহার সামান্য বা কোনও অক্ষরের সাথে দেখায় যেমন রঙ মোজাইক
এই মুহুর্তে আমার কাছে ভিএম-এ যা আছে তা হ'ল আর্ক লিনাক্স এবং যদিও প্রশ্নটি বিতরণ সুনির্দিষ্ট নয়, আমি ফাইলটি কাস্টমাইজ করার জন্য তাদের ডকুমেন্টেশনগুলি দেখেছি /etc/bash.bashrc
। আমি দেখতে পাচ্ছি যে প্রচুর ব্যাখ্যাগুলি প্রম্পটের উপস্থিতি এবং সাধারণত সমস্ত পূর্বগ্রন্থের উপাদানগুলি কনফিগার করতে যায় । ব্যাকগ্রাউন্ডের জন্য কোনও কনফিগারেশন সম্পর্কিত খুব কম তথ্যই রয়েছে, সাধারণত একটি দৃ color় রঙ ছাড়া, যেমন এই সেটিংস এবং টিপস :
# Background
On_Black='\e[40m' # Black
On_Red='\e[41m' # Red
On_Green='\e[42m' # Green
On_Yellow='\e[43m' # Yellow
On_Blue='\e[44m' # Blue
On_Purple='\e[45m' # Purple
On_Cyan='\e[46m' # Cyan
On_White='\e[47m' # White
আমি এখনও ধারণাগতভাবে বুঝতে পারি না যে আমি খালি / ফাঁকা / ব্যাকগ্রাউন্ডের "স্পেস" কী লিখি যা আমি টাইপ করি নি যখন আমি কনসোলটি ব্যবহার করি অর্থাত "তারা কী দিয়ে তৈরি?" তাই কথা বলতে. বিশেষত যা প্রম্পটে নেই এবং যেগুলি আদেশগুলি প্রতিধ্বনিত হয় তার চারপাশে মোড়ানো। সক্রিয় লাইনে যা ঘটেছিল সে সম্পর্কে, এটি প্রদর্শিত সম্ভব যে bash
"লাইন-ওরিয়েন্টেড" উপায়ে কাজ করে এবং কিছু ক্রিয়াকলাপ সক্রিয় লাইনের একটি ক্লিয়ারিংকে ট্রিগার করে ( for i in $(seq 1 $(expr $(tput lines) \* $(tput cols))); do echo -n M; done; tput cup 15 1
তারপরে প্রম্পটে একটি চর টাইপ করে এটি ব্যাকস্পেসে প্রদর্শন করা হয়) একটি অবদানকারী) - যার পরিমাণ একটি সি এল এল থেকে অন্য যথা zsh এ পরিবর্তিত হতে পারে। তদ্ব্যতীত, মনে হয় যখন আমি \[\033[44m\]
আমার পিএস 1 লাইনের মতো কিছু যুক্ত করব তখন আমি bash.bashrc
পুনরায় লোড করার পরে একটি নীল পটভূমি পাই - সুতরাং স্পষ্টতই আমি জানি যে এখানে কিছু আছেব্যাকগ্রাউন্ড সম্পর্কিত হিসাবে আউটপুট উপস্থিতি insofar উপর এখানে উত্থাপন ।
তবে আমি আরও জানি যে বাশ একটি সফ্টওয়্যার টুকরা যা কিছু অন্যান্য সুবিধার উপর নির্ভর করে টিটিওয়াই সাবসিস্টেম আকারে জিনিসগুলিকে পর্দায় আনার জন্য - এবং এটি সেখান থেকে আমার ধরে নেওয়া কার্নেলের ভিটি উপাদানটিতে চলে যায় । pstree -Ap
অন আর্চ শোগুলিতে systemd
যুক্ত হয় login
এবং তারপরে bash
।
আর্চ লিনাক্স ডিস্ট্রিবিউশন উপর নির্ভর agetty
পির TTY পরিষেবার জন্য। একটি সাধারণ echo $TERM
ব্যবহারের ক্ষেত্রে টার্মিনালের ধরণের উত্পন্ন করবে (এখানে কোনও ডিই এর বাইরে "" লিনাক্স ") এবং infocmp[-d spec1 spec2]
কোনও পরামিতি না থাকা কমান্ডটি টার্মিনালফো (5) টার্মিনাল ডাটাবেস থেকে সক্রিয় টার্মিনাল ক্ষমতা এবং প্রোফাইল তথ্য প্রদর্শন করবে :
# Reconstructed via infocmp from file: /usr/share/terminfo/l/linux
linux|linux console,
am, bce, ccc, eo, mir, msgr, xenl, xon,
colors#8, it#8, ncv#18, pairs#64,
acsc=+\020\,\021-\030.^Y0\333'\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l\E[?1c,
clear=\E[H\E[J, cnorm=\E[?25h\E[?0c, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cvvis=\E[?25h\E[?8c, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
el1=\E[1K, flash=\E[?5h\E[?5l$, home=\E[H,
hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=^J,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~, kend=\E[4~, kf1=\E[[A,
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,
kf3=\E[[C, kf4=\E[[D, kf5=\E[[E, kf6=\E[17~, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
kmous=\E[M, knp=\E[6~, kpp=\E[5~, kspd=^Z, nel=^M^J, oc=\E]R,
op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=\E[10m,
rmam=\E[?7l, rmir=\E[4l, rmpch=\E[10m, rmso=\E[27m,
rmul=\E[24m, rs1=\Ec\E]R, sc=\E7, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
sgr0=\E[0;10m, smacs=\E[11m, smam=\E[?7h, smir=\E[4h,
smpch=\E[11m, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c,
vpa=\E[%i%p1%dd,
যেমনটি দাঁড়িয়েছে, টার্মিনাল কাঠামো থেকে অনেকগুলি দক্ষতা অর্জন করা যায় এবং PS1 ভেরিয়েবল সেট করে প্রম্পটটি কাস্টমাইজ করা হওয়ায় এটি বৈশিষ্ট্যগুলি যা bash.bashrc কনফিগারেশন ফাইল ইনসোফারে প্রকাশিত হয়। টার্মিনাল তথ্য ডাটাবেসে বর্ণিত কার্সার এবং অন্যান্য ক্ষমতা সরিয়ে ফাংশন সরবরাহ করার জন্য মূলত টার্মিনালে প্রদর্শিত চরিত্রের প্রবাহকে বাধাগ্রস্ত করতে নিয়ন্ত্রণ এবং পালানোর ক্রমগুলি ব্যবহৃত হয় sequ এই ফাংশনগুলির অনেকগুলি সুপরিচিত ESC[
(বা \ 33) কন্ট্রোল সিকোয়েন্স ইন্ট্রোডুসার ( এখানে এবং এখানে আরও ক্রম এবং কিছু উদাহরণ ) ব্যবহার করে পাস করা হয়েছে । তদ্ব্যতীত, এটি ব্যবহার করাও সম্ভবtput
কিছু টার্মিনাল বৈশিষ্ট্য পরিবর্তন করতে সরাসরি সিএলআইয়ের ইউটিলিটি; উদাহরণস্বরূপ tput setab 4
নীল পটভূমিতে বাশ ইকো কমান্ড থাকবে।
যদি আমরা strace bash
পালিয়ে যাওয়ার ক্রম এবং ক্রিয়া আচরণ উভয়ই দেখতে পাই:
write(2, "[il@Arch64vm1 ~]$ ", 19[il@Arch64vm1 ~]$ ) = 19 //bash starts
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, " ", 1) = 1 //pressed <space>
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, " ", 1 ) = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\177", 1) = 1 //pressed <backspace>...
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "\10\33[K", ) = 4 //triggers erasing the line
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
read(0, "\33", 1) = 1 //pressed <esc> per se
এটি প্রশ্নের জন্য প্রসঙ্গটি সরবরাহ করে একটি টার্মিনালের ফাঁকা ফাঁকা স্থান / পটভূমির রঙ এএসসিআইআই অক্ষরের একটি এলোমেলো (তবে সুন্দর) সেট দিয়ে প্রতিস্থাপন করা যাবে? তবে কীভাবে বৈশিষ্ট্যগুলি প্রয়োগ করতে হবে বা টার্মিনালে আমি কী খুঁজছি সে সম্পর্কে কোনও ধারণা দেয় না।
সুতরাং আমি যদি এটি সম্ভব হয় তবে শেষের ফলাফলটি দেখতে কেমন হতে পারে তার একটি উদাহরণ হিসাবে একটি অশোধিত মকআপ তৈরি করেছি (কোনও গুরুত্ব সহকারে নয় :):
মূলত টার্মিনালের সমস্ত "খালি স্থান" প্যাটার্ন দিয়ে ভরাট হবে (এখানে আমি উপরের চিত্রটির একটি "টালি" দিয়েছি তবে আমি প্রতিটি ব্যক্তির "ফাঁকা" এর প্রকৃত বাস্তবায়নে সেটটি থেকে এলোমেলোভাবে উত্পন্ন করতে চাই পূর্ণাঙ্গতা থেকে ডকুমেন্টেড 5-6 অক্ষর এবং বৈশিষ্ট্য যা নির্দিষ্ট করা হবে)। সক্রিয় কমান্ড লাইনের জন্য যেমন wেউয়ের "জল" এর জন্য আলাদা প্যাটার্ন রয়েছে তবে আমি লাইনটি নীল হওয়ার জন্য স্থির করব। যেমন এটি কল্পনা করা হয়েছিল, কমান্ডগুলি সক্রিয় লাইনে টাইপ করার সাথে সাথে "জল" "মুছে ফেলবে" এবং অবশ্যই একটি সীমাবদ্ধতা হ'ল অক্ষরের বিন্যাসটি সিআইএল দ্বারা কখনই ব্যাখ্যা করা হয় না অন্যথায় এটি এটিকে অকেজো করে তোলে।
bash
টার্মিনাল ফ্রেমওয়ার্কে বা সঠিকভাবে কোনও কনফিগারেশন উন্মুক্ত হয়েছে , বা কোনও স্ক্রিপ্ট যা টার্মিনালে বাশের আউটপুট পরিবর্তন করতে বর্ণের একটি সেট এবং রঙের উপর কিছু নিয়ন্ত্রণ ব্যবহার করতে দেয় যাতে ব্যাকগ্রাউন্ডের জন্য কিছুটা এলোমেলো নিদর্শন তৈরি করতে পারে (যা আমি উপরে দেখিয়েছি তার অনুরূপ হবে)? বা টিটিটির ব্যাকগ্রাউন্ড হিসাবে পুরো প্যাটার্ন চিত্র সরবরাহ করার চেষ্টা করার মতো কিছু করার জন্য আমার কি সহজ সমাধান করা উচিত ?
বাস্তবায়নের
0.1 - প্যাটার্ননোটডি সংস্করণ (আপনি লগইন করার সময় একটি শট চুক্তি)
নীচের প্রকাশটি আমি আমার .bashrc ফাইলটিতে যুক্ত করেছি যা আমরা অনুসন্ধান করেছি এমন কিছু ধারণাকে একসাথে রেখেছি এবং স্ট্যান্ডার্ড লিনাক্স টার্মিনালে ভিজ্যুয়ালগুলির ধারণার একটি (খুব) প্রাথমিক প্রমাণটি গঠন করেছি:
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 15; tput setab 4; echo -en "\E[2K"; tput setab 0
পর্যবেক্ষণ
- এটি স্পষ্টতই একটি কমান্ড যাতে স্থির নয় অর্থাৎ কমান্ডগুলি টাইপ করার সাথে সাথে এটি স্ক্রোলটি সরে যায়
- অক্ষরের নির্বাচনকে পৃথকভাবে এলোমেলো করে না বেছে নেওয়া অর্থাত্
head -c 1
শুরু হওয়াtput cols
বহুগুণিত রেখার সাথে, যা উদ্ধৃত নির্বাচন থেকে পৃথক এলোমেলো অক্ষর মুদ্রণ করবে - কারণ এটি খুব ধীর। আমি মনে করি না যেrandom
একটি দীর্ঘ সংখ্যক (টিপুট কলস) জেনারেট করে তবে এটি আরও দ্রুত। অবশ্যই এটি সব খুব অপব্যয় তবে এটি কাজ করে। - চরিত্র অনুসারে কোনও রঙ বা প্রভাব এলোমেলোভাবে হয়নি বা অন্যথায় that সবুজ বাদে কারণ আমি যেমন প্রতিটি চরকে পৃথকভাবে রেন্ডারিং / প্রসেসিং করেছি তা খুব ধীর। পুনঃ ফ্রেমবফার?
- আমি দেখে খুশি যে প্যাটার্নটি সিএলআই দ্বারা ব্যাখ্যা না করা অর্থে সিএলআই ব্যবহারে হস্তক্ষেপ করে না! (কেন যদিও আমি ব্যাখ্যা করতে পারি না)
- জল খুব দ্রুত চলে গেছে! ;-)
0.2 - PROMPT_COMMAND হ্যাক কাজ
প্রতিটি প্রাথমিক প্রম্পট বাশ মুদ্রণের ঠিক আগে ভেরিয়েবলের PROMPT_COMMAND এর মান পরীক্ষা করা হয়। আমি জানি আপনি সাধারণত স্ক্রিপ্ট কল করতে ভেরিয়েবলটি ব্যবহার করবেন যেখানে আপনি ডিসপ্লে ইত্যাদি থেকে উপাদানগুলি প্রক্রিয়া করতে পারেন তবে আমি বরং আমার .bashrc ফাইলটিতে এটি করার চেষ্টা করছি। প্রাথমিকভাবে আমি ভেবেছিলাম আমি কিছু স্থিতিগত সচেতনতা প্রয়োগ করতে পারি অর্থাৎ মৃত্যুদন্ড কার্যকর করার আগে কার্সারটি কোথায় (তাই আমি tput
পজিশনে যে কোনও জায়গায় জিনিসটি আগে যে অবস্থানে ফিরে আসতে পারতাম, অবস্থান উত্তোলনের জন্য এই জাতীয় কিছু ব্যবহার করে :
stty -echo; echo -n $'\e[6n'; read -d R x; stty echo; echo ${x#??} //value is in x;x format so...
আমি মানটি পাইপ করতাম cut -f1 -d";"
। আমি সিএলআইতে এটি করতে পারি তবে পিএস 1 / পি_সি ভেরিয়েবলের উপাদানগুলির অনুক্রমের অভ্যন্তরে এই কাজটি করা আমার মুহুর্তের বাইরে এবং এটি সম্ভব যে PROMPT_COMMAND এ যা কিছু কমান্ড দেওয়া হয়েছে তা প্রতিটি গাড়ীর ফেরতের সময় মূল্যায়ন না করা যেতে পারে প্রতিবার মৃত্যুদণ্ড কার্যকর হওয়া সত্ত্বেও কেবল একবার (?) (নীচের পর্যবেক্ষণগুলি দেখুন)।
তাই আমি যা করতে পারি তার সেরাটি হল আমার প্রাথমিক ক্রমটি বহন করা এবং PROMPT_COMMAND এবং .bashrc- তে PS1 ভেরিয়েবলের সংজ্ঞা উভয়টিতে কিছু কমান্ড যুক্ত করা। তাই ভালো:
PROMPT_COMMAND="echo -en '\E[32;32m'$(tr -dc ',.:~' < /dev/urandom | head -c $(echo "$[$(tput cols) * 2]"))"
PS1="$(echo -en '\n') $(tput setab 4)$(echo -en "\E[2K")$(tput setab 0)\[\033[7;32m\]df:\[\033[1;34m\] \W @d \[\033[0m\]\e[32m"
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[32;32m'$(tr -dc '",.;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1; tput setab 4; echo -en "\E[2K"; tput setab 0
সংক্ষেপে আমি স্থায়ী ভিজ্যুয়াল প্যাটার্ন অর্থাৎ 2 টি লাইন যুক্ত হওয়ার চেষ্টা করার জন্য P_C ব্যবহার করছি। দুর্ভাগ্যক্রমে আমি আমার "জল" ট্রিকটির পুনরাবৃত্তি করার সময় যেমন অ্যাক্টিভ লাইন নীল (যা কেবল পটভূমির রঙ পরিবর্তন করে, একটি পরিষ্কার রেখা তৈরি করে, তারপর ব্যাকগ্রাউন্ডটিকে কালো রঙে পরিবর্তন করতে পারে) উভয়ই এই প্যাটার্নটি তৈরি করতে সক্ষম হতে পারি না। এটি কীভাবে একসাথে অভিনয় করে তা দেখানোর জন্য আমি একত্রে একটি চিত্র রেখেছি:
পর্যবেক্ষণ
- একটি লাইনে ব্যাকস্পেস ব্যবহার করা এখনও স্পষ্ট লাইনের আচরণকে ট্রিগার করে এবং নীল হয়ে যায়
- প্রতিবার এন্টার কী টিপলে নতুন সক্রিয় লাইনের আগে প্যাটার্নের 2 টি লাইন রয়েছে
- অবশ্যই অতিরিক্ত লাইন থাকা সত্ত্বেও আমরা আরও নীচে দেখতে পাচ্ছি আমরা যেমন কমান্ডগুলির পাশে প্যাটার্নটি মোড়ানো করছি না
ls
- এখানে পি_সি-তে ডাকার সময় / দেব / ইউরানডমের এলোমেলো মনে হয় না। এই চিত্রটি 2 টি চিত্রের মধ্যে তৈরি, তবে এটি নেওয়া সহজ যে অতিরিক্ত 2 লাইন প্যাটার্নটি সর্বদা একই থাকে ie প্রতিটি এন্টার কিপ্রেসের সাথে এলোমেলোভাবে উত্পন্ন হয় না তবে দুটি লাইনের প্রতিটিটির জন্য কেবল একটি সময় - সম্ভবত প্রথমটি সময় .bashrc দ্বারা পড়া হয়
bash
। - পিএস 1 ভেরিয়েবলের সামগ্রীটি শুরু হয়
$(echo -en '\n') $(tput setab 4)
- ভাল there (টিপুট ...) এর ঠিক আগে, মাঝখানে সেই জায়গাটি এটির কাজ করার জন্য সেখানে থাকতে হবে। অন্যথায় নীল রেখাটি প্রম্পটের উপরে প্রদর্শিত হবে এবং এর সামনে নয় এবং আমি এটি সমাধান করতে পারি না। এবং এই হ্যাকটি তার নামটি 0.2 এ দেয়। :)
0.3 - tput cuu
এবংtput cud
for i in $(seq 1 $(expr $(tput lines))); do echo -en '\E[0;32m'$(tr -dc '",.o;:~' < /dev/urandom | head -c $(tput cols)); done; tput cup 1
PROMPT_COMMAND="echo -en '\033[0;32m$(tr -dc ',;o.:~' < /dev/urandom | head -c $(tput cols))\n\033[36;44m$(tr -dc '~' < /dev/urandom | head -c $(tput cols))\033[0;32m$(tr -dc ',.o+;:~' < /dev/urandom | head -c $(tput cols))'$(tput cuu 2)"
PS1="\[\033[0m\] \[\033[1;32m\][1]\[\033[7;32m\]=2=:\W)\[\033[0;32m\]=3=\[\033[1;32m\]=4=@>\[\033[0;32m\]"
PROMPT_COMMAND দিয়ে যা করা হয় তা হ'ল প্রম্পট উত্পন্ন হওয়ার আগে প্রতিবার 3 লাইন নিদর্শন মুদ্রণ করা হয় - এবং সেই 3 সেটগুলি নিদর্শনগুলি 0.2 তে ব্যাখ্যা করা সীমাবদ্ধতার মধ্যে স্বতন্ত্রভাবে উত্পন্ন হয় - এটি পানির জন্য অর্থহীন কারণ এটি 1 চর তবে এখনও রয়েছে। তারপরে আমরা দুটি লাইন (ব্যবহার করে tput cuu 2
) উপরে চলে যাই এবং পিএস 1 অনুসারে প্রম্পটটি মাঝের লাইনে উত্পন্ন হয়। আমাদের এখনও .bashrc লোডে পূর্ণ স্ক্রীন প্যাটার্নের জন্য আমাদের প্রাথমিক কমান্ডটি রয়েছে যা আমরা একবার টার্মিনালে লগ ইন করলেই একবার কার্যকর করা হয়। এখন আমাদের সক্রিয় লাইনের চারপাশে কিছু প্যাডিং রয়েছে যার নিজস্ব নীল প্যাটার্ন রয়েছে যা কোনও ফেরতের গাড়ি থাকলে সর্বদা পুনরাবৃত্তি হয়। PS1 ভেরিয়েবল এবং পি_সি এর সামগ্রীগুলি স্যানিটাইজ করা হয়েছে। এস্কেপ সিকোয়েন্স এবং কালার কোডিংয়ের বাক্য গঠন দীর্ঘ সময়ের মধ্যে এম্বেড করা হয়েছেecho
সিকোয়েন্সগুলি জটিল হতে পারে। ত্রুটিগুলি অদ্ভুত টার্মিনাল আচরণের দিকে পরিচালিত করেএকে অপরকে ওভাররাইট করে এমন লাইনগুলি সহ, একটি প্রম্পট যা বাম মার্জিন থেকে দূরে প্রদর্শিত হয় বা অস্বাভাবিকভাবে প্রক্রিয়াজাত হয়ে যাওয়া স্টাফের জন্য অস্বাভাবিক আউটপুট। আমি যা করছি তার সাথে একটি শর্ত বিদ্যমান, যেখানে লিনাক্স টার্মিনাল এবং lxterm এর সাথে আমার সেটআপ (আর্চ ব্যাং) এর মধ্যে একটি ভিজ্যুয়াল পার্থক্য মোকাবেলায় PS1 ভেরিয়েবলের ভিতরে অতিরিক্ত স্থানের প্রয়োজন। অতিরিক্ত স্থান ব্যতীত লিনাক্স টার্মিনাল প্রম্পটের প্রথম অক্ষরটি শেষ লাইনের শেষে প্রিন্ট করে যে কারণে আমি বুঝতে পারি না (অবশ্যই এটি আমি এমন কিছু করি যা ডিফল্ট আচরণ নয়)। এছাড়াও উদ্ধৃতি চিহ্নগুলিতে অক্ষরের সেটটিতে কিছু এলোমেলো প্রভাব (গা bold়, বিপরীতমুখী ইত্যাদি) কীভাবে উত্পন্ন করা যায় তা নির্ধারণ করতে পারে না, কারণ পারফরম্যান্স বাড়ানোর জন্য দীর্ঘতর স্ট্রিং উত্পন্ন করার বিষয়ে প্রাথমিক সিদ্ধান্ত নেওয়া হয়েছিল।
টার্মিনালটি খুললে প্রাথমিক প্যাটার্ন
একটির পরে আচরণ clear
এবং প্রম্পটে ক্রমাগত প্রবেশ টিপুন
পর্যবেক্ষণ
- নিদর্শনগুলিকে বাল্কে না করে রঙিন করার জন্য পুনরায় ডিজাইন করা বা সংশোধন করা উচিত
- অনুভব করতে শুরু করে যে আরও অনেক কিছু এগিয়ে যাওয়ার জন্য সমস্ত কিছু হয় স্ক্রিপ্টে রাখা বা বিমূর্ততার কিছু উচ্চতর রূপের প্রয়োজন। তবে টার্মিনাল ক্ষমতাগুলি শেষ ব্যবহারকারীর জন্য যথেষ্ট সক্ষম করছে (আমাকে "লোগো" মনে করিয়ে দেয়)!