স্ক্রিপ্ট থেকে পাইপ কোর ডাম্প


0

আমি সংকলন করার জন্য একটি পরীক্ষামূলক স্ক্রিপ্ট তৈরি করছি (মেকের মাধ্যমে) এবং একগুচ্ছ পরীক্ষাগুলি চালাচ্ছি। আমি একটি সিরিজ আছে cat, grepএবং sedকমান্ড যে সব পরীক্ষার ফলাফল আয়োজন সুন্দরভাবে অবশ্য কোর-ডাম্প এর ব্যতিক্রম নেই। ধরা যাক আমার কাছে একটি প্রোগ্রাম রয়েছে test। যদি ./testকোর ডাম্প হয় তবে নিম্নলিখিত লাইনগুলি এটি ধরবে না (যেমন এটি ফাইলে পাইপ দেওয়া হবে না):

./test 2>&1 > >(tee log)
./test > log 2>&1

এটি সম্ভবত স্ক্রিপ্ট থেকে এই ত্রুটি বার্তার কারণে:

./script.sh: লাইন 53: 4783 বাতিল করা হয়েছে (কোর ডাম্পড) test </ strong>> 1 ও 1>>

আমার একটি হ্যাকি ওয়ার্কআউন্ড রয়েছে যা makeএকটি কাস্টম নিয়ম দিয়ে প্রোগ্রামটি চালু করে:

রান-টেস্ট 2> & 1 করুন ল-লগ

এটি বর্তমানে কার্যকর, তবে এটি করার জন্য মেকফিলটি ব্যবহার করা কিছুটা হ্যাকি। শেল স্ক্রিপ্ট লাইনটি বাতিল না করে কোর-ডাম্প ক্যাপচার করার অন্য কোনও উপায় আছে কি?

উত্তর:


1

আপনি যদি testঅন্য প্রোগ্রামের স্ক্রিপ্ট থেকে আপনার প্রোগ্রামটি চালাতে ইচ্ছুক হন তবে script স্ক্রিপ্ট থেকে আউটপুট ক্যাপচার করার জন্য এটি যথেষ্ট ভাল। অর্থাৎ, " ./test" এ putোকান testscript.shএবং তারপরে বলুন

./testscript.sh > log 2>&1

আরও কমপ্যাক্ট তবে কম স্বজ্ঞাত সমাধান

sh -c "./test" > log 2>&1

উভয় সমাধানই সেই প্রোগ্রামটির উপর ভিত্তি করে তৈরি করা শেল যা একটি প্রোগ্রাম চালায় সে সেই ব্যক্তি যিনি লক্ষ্য করেন যখন প্রোগ্রামটি মূল ডাম্প করে, এবং ত্রুটিযুক্ত বার্তা সরবরাহ করে। সুতরাং, এই বার্তাটি ক্যাপচার করতে আপনাকে শেল থেকে আউটপুট ক্যাপচার করতে হবে।


2

এটি শেলটি ক্র্যাশিং প্রোগ্রামের চেয়ে সেই বার্তাটি মুদ্রণ করে। শেলের আউটপুটও ক্যাপচার করতে, আপনি চান:

{
./test
} > log 2 >&1

ধনুর্বন্ধনী এর ফলে কমান্ডগুলি সঞ্চালনের জন্য একটি সাব শেল চালিত হয় এবং কেবলমাত্র একটি কমান্ডের পরিবর্তে পুরো সাব শেলের আউটপুট পুনঃনির্দেশিত হয়।

বিকল্পভাবে আপনি যদি স্ক্রিপ্টের বাকী অংশের জন্য সমস্ত আউটপুট পুনঃনির্দেশ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

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