কীভাবে লোকে স্ট্যান্ডার্ড ত্রুটি প্রিন্ট করা যায়


14

আমি স্ট্যান্ডার্ড আউটপুটের একই রঙ ব্যবহার না করে কীভাবে কনসোলে লাল রঙের স্ট্যান্ডার্ড ত্রুটিটি মুদ্রণ করতে পারি?

জিনোম টার্মিনাল ব্যবহার করা কি সম্ভব ?


এই লিঙ্কটি আপনাকে সাহায্য করতে পারে
devav2

আপনি ইউটিলিটিটি ব্যবহার করেhilite একটি কমান্ডের জন্য এই আচরণটি সক্ষম করতে পারেন । hiliteএটি ব্যবহারের জন্য আপনাকে নিজের শেল কমান্ডটি ম্যানুয়ালি প্রিনড করতে হবে, তবে আপনি যদি জানেন বা কোনও কমান্ড ত্রুটিগুলি খুঁজে বের করে এবং আপনি সেগুলি সনাক্ত করতে চান তবে এটি দরকারী।
ররি ও'কেনে

উত্তর:


8

আমি স্ট্যাডারড ব্যবহার করি এবং এটি একটি ভাল সমাধান পেয়েছি। এর রিডমি নোট হিসাবে :

স্টাড্রেড হুকস রাইটিং () এবং স্ট্রিম ফাংশনগুলির একটি পরিবার (ফাইরাইট, এফপ্রিন্টফ, ত্রুটি ...) libc থেকে সমস্ত স্ট্যাডার আউটপুটকে টার্মিনালে যায় যাতে এটি স্টডআউট থেকে পৃথক করে তোলে। মূলত এটি টেক্সটকে মোড়ক করে যা বর্ণনাকারী "2" দিয়ে ফাইলগুলিতে যায় যথাযথ এএনএসআই এস্কেপ কোডগুলি পাঠ্যকে লাল করে তোলে।

এটি একটি ভাগ করা লাইব্রেরি হিসাবে প্রয়োগ করা হয়েছে এবং ডায়নামিক লিংকারগুলির প্রিললোড / সন্নিবেশ বৈশিষ্ট্যটির জন্য বিদ্যমান বাইনারিগুলির পুনরায় সংকলনের প্রয়োজন নেই।

এটি লিনাক্সে (LD_PRELOAD সহ), ফ্রিবিএসডি (এছাড়াও LD_PRELOAD) এবং ওএসএক্স (DYLD_INSERT_LIBRARIES সহ) সমর্থিত।

এটি সংকলন করা সহজবোধ্য, তবে আপনাকে এটির গিথুব সাইট থেকে প্রাপ্ত নির্দেশাবলী অনুসরণ করে উত্স থেকে এটি তৈরি করতে হবে :

sudo apt-get install build-essential git cmake 

তারপর

git clone git://github.com/sickill/stderred.git
cd stderred

তারপর

make

এর সর্বাধিক গুরুত্বপূর্ণ অংশটি আপনার উপযুক্ত লাইনে যুক্ত করা .bashrc; আপনার অবশ্যই libstderred.soবিল্ড ডিরেক্টরিতে ফাইলটি লিঙ্ক করতে হবে ; আপনাকে অবশ্যই নিখুঁত পথটি ব্যবহার করতে হবে যেখানে বিল্ড ডিরেক্টরিটি (/ home / mike / src / stderred / build) is আমি আমার সাথে নিম্নলিখিতগুলি যুক্ত করি .bashrc:

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

স্পষ্টতই, আপনি যখন এটি আর ব্যবহার করতে চান না তখন আপনার উপরের লাইনটি সরিয়ে .bashrcটার্মিনালটি পুনরায় চালু করুন।

অস্তিত্বহীন ফাইলগুলিতে পরীক্ষিত ফলাফলগুলি (এটি sudoব্যবহার করার পরে স্পষ্টতই কাজ করবে না , কারণ .bashrcভিন্ন পরিবেশ নির্ধারণ করা হলে ব্যবহারকারীর পড়া হবে না):

(যাই হোক এটা না আমার ডিউক চালু @ Nukem প্রম্পট লাল হিসাবে যে লাল ছিল ইতিমধ্যে )

এখানে চিত্র বর্ণনা লিখুন


বিশ্বাস করতে পারছি না যে এতটা বছর না জেনেও এই বিদ্যমান! এটি আশ্চর্যজনকভাবে দরকারী এবং ওহ, একশো বছর বা তার বেশি সময়ের জন্য এটি OS এর অংশ হওয়া উচিত ছিল। :)
রজার ডাহল

6

হ্যাঁ, জিনোম টার্মিনাল যেহেতু একটি এএনএসআই টার্মিনাল এবং মানক এএনএসআই এস্কেপ কোডগুলি সমর্থন করে।

এখানে একটি উদাহরণ। আপনার টার্মিনালে এটি টাইপ করুন:

echo -e "\e[01;31mREDRUM\e[0m"

-eযাতে বিকল্প, ব্যাকস্ল্যাশ কোড ব্যাখ্যা করতে পারবেন \e"Esc চাপুন" (হেক্স কোড 0x1B) হয়ে যায়। বিকল্পভাবে, সরাসরি পালাতে প্রবেশ করতে, টিপুন ctrl-V Esc:

echo  "^[[01;31mREDRUM^[[0m"

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

উপরের উত্তরটি আপনাকে জানায় যে আপনি নিজের প্রোগ্রামটি লেখার সময় কীভাবে রঙ ব্যবহার করবেন।

তবে, আমি যদি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি স্টাডার এবং চলমান যে কোনও প্রোগ্রামের স্টাডাউটের জন্য একটি চাক্ষুষ বিচ্ছেদ করতে চান। ফিল্টারের মাধ্যমে তাদের আউটপুটকে পার্স করা ছাড়া এটি সোজা নয়। এটি করার জন্য এখানে একটি উদাহরণ ( এখানে পাওয়া যায় ):

  1. একটি ফাংশন সংজ্ঞায়িত করুন (আপনি এটি আপনার .bashrc ফাইলে রাখতে পারেন):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. এর মতো প্রোগ্রাম শুরু করুন:

    color program
    

প্রোগ্রামগুলি থেকে স্ট্যাডারটি রঙিন লাল হয়ে উঠবে।


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