ব্যাশ কাজ করে না ত্রুটি প্রচার


1

আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা নীচের মতো রয়েছে ...

উপরে কিছু ফাংশন সংজ্ঞা এবং এর মধ্যে একটি হ'ল ...

function err_out    
{

 trap 'echo "ERROR in $STEP function. EXITING!";exit 1' ERR    
 #some more messages

 exit 1
}

# Main program starts here
trap 'err_out' ERR

#do something
#call some functions
#call cleanup function
#end of script

ফাংশনে যখন কখনও কোনও ত্রুটি ঘটে থাকে তখন তাদের প্রচার করা হয় না এবং ত্রুটিযুক্ত কর্মের জন্য ডাকা হয় না।

আমি চেষ্টা করেছি #! / বিন / বাশ -E ; এইভাবে যখন কোনও ত্রুটি থাকে তখন স্ক্রিপ্টটি প্রস্থান করে তবে আমার যা প্রয়োজন তা হ্যান্ডলারের কাছে সঠিকভাবে প্রচার করা ত্রুটি।

উত্তর:


3

থেকে bashতথ্য পৃষ্ঠা:

শেল সঞ্চালনের পরিবেশের অন্যান্য সকল দিক একটি ফাংশন এবং এই ব্যতিক্রম সঙ্গে তার কলার মধ্যে অভিন্ন: DEBUG এবং RETURNযাত্রীর সঙ্গের নিজলটবহর উত্তরাধিকারসূত্রে নেই যদি না ফাংশন দেওয়া হয়েছে traceঅ্যাট্রিবিউট ব্যবহার করে declarebuiltin বা -o functrace বিকল্প সক্রিয় করা হয়েছে setbuiltin, (যেখানে যদি সমস্ত ফাংশন DEBUGএবং RETURNট্র্যাপগুলি ERRউত্তরাধিকার সূত্রে প্রাপ্ত হয় ), এবং -o errtraceশেল বিকল্পটি সক্ষম না করা হলে ট্র্যাপটি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না ।

ফাঁদটি আপনার কার্যক্রমে ছড়িয়ে দেওয়ার set -o errtraceজন্য আপনাকে স্ক্রিপ্টের শীর্ষে থাকা দরকার ERR

অতিরিক্তভাবে, আপনাকে সেই পুনরাবৃত্তির ERRফাঁদটি সম্পর্কে সতর্কতা অবলম্বন করা উচিত err_out। আপনি কি সত্যিই ত্রুটি হ্যান্ডলারের একটি নতুন ফাঁদ সেট করতে চেয়েছিলেন, বা আপনি এই বার্তাটি প্রদর্শন করতে চান? যদি দ্বিতীয়টি হয় তবে কেবল echoএটি; The trapশুধুমাত্র যদি আপনার ত্রুটি হ্যান্ডলার একটি ত্রুটি ঘটেছে প্রার্থনা করা হবে।


হ্যাঁ, কিন্তু মূল পোস্টার উল্লেখ করেন যে, সে চেষ্টা #!/bin/bash -Eএবং ব্যাশ র manpage উল্লেখ: -o errtrace: Same as -E.। সুতরাং সমস্যাটি অন্য কিছু বলে মনে হচ্ছে।
বিএমকে

"সংযোজন" দেখুন। -E/ errprintপ্রয়োজনীয় তবে যথেষ্ট নয়।
গীকোসৌর

ঠিক আছে - আমি দেখছি, আপনি ঠিক বলেছেন।
বিএমকে

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