সোলারিসের একটি কমান্ড থেকে আউটপুট রঙ করার জন্য সেড ব্যবহার করুন


29

আমার কাছে একটি ksh স্ক্রিপ্ট রয়েছে যা অবশ্যই লিনাক্স এবং সোলারিস উভয় ক্ষেত্রেই কাজ করতে পারে। আমি নির্দিষ্ট কমান্ডের আউটপুট রঙ করার চেষ্টা করছি। এটি লিনাক্সে (বিশেষত RHEL6) কাজ করে তবে সোলারিসে নয় (সানোএস 5.10)।

লিনাক্সের কমান্ড (আউটপুট "টেস্ট" সঠিকভাবে লাল বর্ণের):

[amartin@linuxbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
test

সোলারিসে আদেশ (আউটপুট "পরীক্ষা" রঙিন নয়):

[amartin@sunbox:~]$ echo "test" | sed 's,.*,\x1B[31m&\x1B[0m,'
x1B[31mtestx1B[0m

এই কমান্ডটি এমনভাবে তৈরি করার কোনও উপায় আছে যাতে আউটপুটটিতে কাঁচা কোড ছাড়াই আউটপুট লাল হয়? আমি 'ইকো' কমান্ডটি পরিবর্তন করতে পারি না কারণ আমি যে কমান্ডটি চালিয়ে যাচ্ছি তার জন্য এটি কেবলমাত্র একটি পূরণ।

উত্তর:


35

\xNN জিএনইউ সেডে একটি পালানোর অনুক্রম, তবে এটি স্ট্যান্ডার্ড নয় এবং বিশেষত এটি সোলারিসে উপলভ্য নয়।

আপনি আপনার স্ক্রিপ্টে একটি আক্ষরিক পালানোর চরিত্রটি অন্তর্ভুক্ত করতে পারেন তবে এটি পড়া এবং সম্পাদনা করা শক্ত করে তোলে।

আপনি printfএকটি পালানোর অক্ষর তৈরি করতে ব্যবহার করতে পারেন । এটি হেক্সাডেসিমাল নয়, অষ্টাল পালানোর বিষয়টি বোঝে।

esc=$(printf '\033')
echo "test" | sed "s,.*,${esc}[31m&${esc}[0m,"

আপনি tputসিডে কলটিতে প্রতিস্থাপন পাঠ্য উত্পন্ন করতে কল করতে পারেন । এই কমান্ডটি টার্মিনো ডাটাবেসে এস্কেপ সিকোয়েন্সগুলি সন্ধান করে। তাত্ত্বিকভাবে, tputব্যবহারটি আপনার স্ক্রিপ্টটিকে আরও পোর্টেবল করে তোলে, তবে অনুশীলনে আপনার এমন টার্মিনালের মুখোমুখি হওয়ার সম্ভাবনা নেই যা এএনএসআই পলায়ন কোড ব্যবহার করে না ।

echo "test" | sed "s,.*,$(tput setaf 1)&$(tput sgr0),"

এটি একটি cat |sedখুব ধন্যবাদ উপর বর্ণিত দুর্দান্ত কাজ !
কুম্ভ শক্তি

8

এটি ব্যবহার করা সহজ হবে tput

tput setaf 1; somecommand; tput sgr0

অথবা

tput setaf 1
somecommand
tput sgr0

এটি অগ্রভাগটিকে লাল রঙে সেট করে, রান করে somecommandযা পরে আউটপুটটিকে লাল বর্ণিত করে রঙের ক্রমটি সাফ করে। এই সঙ্গে অন্তত কাজ করে bash, zshএবং ksh

আপনি কী করতে পারেন সে সম্পর্কে আরও তথ্যের জন্য দেখুন tmux(1)এবং দেখুন ।terminfo(5)tput


উত্তরের জন্য ধন্যবাদ. যেমনটি আগেই বলেছি, আমি ইকো কমান্ডটি পরিবর্তন করতে পারি না। আমি যে প্রক্রিয়াটি কল করছি তার জন্য 'প্রতিধ্বনি' হ'ল একটি অবস্থান, যা আমি পরিবর্তন করতে পারি না। একরকম টিপুট দিয়ে সেড ব্যবহার করা কি সম্ভব? এছাড়াও, আমি যখন সুনোস 10.১০ এ সেই আদেশটি চালাচ্ছি তখন আমি কোনও রঙ দেখতে পাচ্ছি না।
acm

এটিকে পৃথক কমান্ডে বিভক্ত করার জন্য আমি এটি আপডেট করেছি।
বাহামত

এটি আমার বর্তমান প্রয়োগের চেয়ে ভাল যে এটি সোলারিতে কাঁচা আসকি কোডগুলি মুদ্রণ করে না। তবে (যে কোনও কারণেই হোক), এটি সোলারিতে 'সামকোমন্ড' এর আউটপুটকে রঙ দেয় না। এটি লিনাক্সে করে। আমি @ গিলস উত্তর গ্রহণ করেছি, যা উভয়ই করে। ধন্যবাদ.
acm

0

কিছু টার্মিনাল (যেমন আমার জন্য বাশ এর মতো) আপনাকে "ctrl-v" কীগুলি টিপুন এবং তারপরে "ctrl + [" ব্যবহার করতে পারবেন এবং এটি আক্ষরিক অব্যাহতি অক্ষরটিকে ইনপুট স্ট্রিংয়ে রাখবে। এটি যদি কাজ করে তবে আপনি সম্ভবত স্ক্রিনে "^ [" মুদ্রিত অক্ষরগুলি দেখতে পাবেন, তবে আপনি যদি আপনার কার্সারটিকে এটির চারপাশে নিয়ে যান তবে এটি এটি একটি চরিত্র হিসাবে বিবেচিত হবে কারণ এটি সত্যই পর্দার আড়ালে রয়েছে।

কী হচ্ছে তা বুঝতে (এবং এটি যদি সম্ভব হয় তা পরীক্ষা করার জন্য) আপনি ctrl + v টাইপ করতে পারেন তারপরে ctrl + i। আপনার দেখতে হবে যে ট্যাব অক্ষরটি আপনার প্রম্পট স্ট্রিংয়ের মধ্যে .োকানো হয়েছিল। কেন এই ঘটনাটির জন্য সিএসের ইতিহাস রয়েছে: তবে দেখা যাচ্ছে যে সত্যিই পুরানো কীবোর্ডটি সিটিআরএল + ট্যাব অক্ষরটি প্রেরণে কঠোরভাবে ওয়্যার্ড করেছিলাম ; এবং ট্যাব কী একই বৈদ্যুতিক সংকেত প্রেরণ করে।

সেই উত্তরাধিকারের কারণে, অনেক টার্মিনালের জন্য ব্যাশ এখনও সেই একই অক্ষরগুলিতে মানচিত্রের জন্য নির্দিষ্ট সিআরটিএল কোডকে ব্যাখ্যা করে।

Ctrl + I ট্যাব চরিত্রের মানচিত্র, এবং ctrl + [ascii পলায়ন চরিত্রের সাথে মেলে।

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