শূন্য-বহির্গমন কোড ব্যতীত আউটপুট দমন করুন


19

আউটপুট (স্টাডআউট এবং স্টডার) দমন করার সর্বোত্তম উপায় কোনটি যদি না প্রোগ্রামটি একটি শূন্য-কোড ছাড়াই বেরিয়ে আসে? আমি চিন্তা করছি:

quiet_success()
{
  file=$(mktemp)
  if ! "$@" > "$file" 2>&1; then
    cat "$file"
  fi
  rm -f "$file"
}

এবং দৌড়াও quiet_success my_long_noisy_script.shতবে আমি এর থেকে আরও ভাল উপায় আছে কিনা তা নিশ্চিত নই। আমার মনে হয় এটি অন্য লোকদের করার মতো কিছু হতে হবে।

প্রসঙ্গে, আমি এটিকে আমার ক্রোন স্ক্রিপ্টগুলিতে যুক্ত করতে চাইছি যাতে তারা ব্যর্থ হলে আমি সমস্ত কিছুর সাথে ইমেল করব, তবে তা না করলে নয়।


এটি বেশিরভাগ কমান্ডের ডিফল্ট আচরণ হওয়া উচিত (সাফল্যের কোনও আউটপুট নয়)। যদি তা না হয় তবে প্রথমে করণীয় হ'ল এই জাতীয় আচরণ সক্ষম করতে একটি বিকল্প / স্যুইচ সন্ধান করা। এটি ব্যর্থ হওয়ায় আপনার পদ্ধতির সঠিক ধারণা। পার্শ্ব নোট: আমি ধরে নিচ্ছি যে আপনি ছদ্ম-কোড পোস্ট করেছেন কারণ এটি আসলে বৈধ shবাক্য গঠন নয় , এবং আপনার পুনঃনির্দেশ ক্রমটি পিছনের দিকে রয়েছে ( > "$file" 2>&1আরও কোটেশন ব্যবহার করুন এবং ব্যবহার করুন)।
jw013

হ্যাঁ, আমি এটি প্রশ্নের মধ্যে টাইপ করেছি। আপনার পরামর্শটি প্রয়োগ করেছেন, এবং আমি সম্মত হই, কমান্ডটি তার জন্য দায়ী হওয়া উচিত , তবে হায় হায় ...
ডিমো 414

কেবল একটি সিনট্যাক্স নোট: কমান্ডের চারপাশে প্রথম বন্ধনের প্রয়োজন নেই।
manatwork

উত্তর:


14

আপনাকে আউটপুটটি কোথাও বাফার করতে হবে, যেহেতু আপনাকে কী করতে হবে তা জানতে প্রস্থান কোডটির জন্য অপেক্ষা করতে হবে। এরকম কিছু সম্ভবত সবচেয়ে সহজ:

$ output=`my_long_noisy_script.sh 2>&1` || echo $output

মনে রাখবেন যে আপনি set -o xtraceযদি নিজের শেল স্ক্রিপ্টটিতে ব্যবহার করেন তবে অ্যাসাইনমেন্টের বিবরণ লগ করার অংশ হিসাবে সমস্ত আউটপুট আবার উপস্থিত হবে output=...:-)। সেক্ষেত্রে সম্ভবত এটি ব্যবহার করা ভাল chronic
জানু-ফিলিপ গেহর্ক্ক

11

moreutilsপ্যাকেজ একটি প্রোগ্রাম রয়েছে chronicএই কাজের জন্য। আপনি ঠিক এটি কল

chronic my_program args ...

ক্রোন চাকরিতে খুব সুবিধাজনক।


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