ব্যাশ ফাংশন থেকে আমি কীভাবে ব্যর্থতার মান ফিরিয়ে দেব?


4

পটভূমি

এই পোস্টে , নিম্নলিখিত সমাধান পোস্ট করা হয়েছিল:

function cmakerel {
    if expr match "$PWD" '*bld*' >/dev/null ; then
        cmake -D....
    else
        echo "Wrong directory!"
    fi
}

cmakerelএকটি ডাকা হবে cmake, কমান্ড যদি PWDগেছে bldতার নাম হবে।

তবে আমি সাধারণত এই আদেশটি অনুরোধ করি: cmakerel && make check

প্রশ্ন

আমি কীভাবে উপরের কোডটি সংশোধন করব যাতে এটি ব্যর্থতার উপর এমন কোনও মান দেয় যাতে দ্বিতীয় অংশটি make checkআহ্বান না করে?

সম্ভবত কিছু ধরণের শূন্য-মান ফিরিয়ে নেওয়া উচিত।

উত্তর:


5

যোগ

return $?

একই নীচের cmakeকোড সহ ফাংশন থেকে প্রস্থান করতে cmakeএবং যুক্ত করতে কলের নীচে

return 1

echoকল সহ নীচে থেকে প্রস্থান করুন 1, যা শূন্য নয় এবং সুতরাং একটি ত্রুটি নির্দেশ করে।


আপনি বিকল্পভাবে (যদি আপনি উভয় আদেশকে সংযুক্তিতে makeকল করেন ) এই কার্যটিতে কলটি যুক্ত করতে পারেন:

 cmake [args] && make -j4

বা, উদাহরণস্বরূপ আরও সূক্ষ্ম ত্রুটিযুক্ত ত্রুটি পরিচালনার জন্য:

cmake [args]
local _ret=$?
if [ $_ret -ne 0 ] ; then
   echo "cmake returned with exit code $_ret, aborting!" >&2
   return $_ret
fi
make -j4

যদি আপনি এটিকে একটি স্বতন্ত্র প্রোগ্রাম হিসাবে কল করেন, অর্থাত শেল স্ক্রিপ্টে ফাংশনটি সংরক্ষণ করুন এবং যেমন অনুরোধ করুন

/path/to/cmakerel.sh

তারপরে আপনি পুরো প্রোগ্রামটি / সাবসেল বাতিল করার exitপরিবর্তে ব্যবহার করতে পারেন return


উফ - ব্যর্থতায়, এটি আমার শেল থেকে বেরিয়ে এসেছে! কোন বিকল্প?
kfmfe04

@ kfmfe04 আমি ভেবেছিলাম আপনি এটাকে শেল স্ক্রিপ্ট প্রোগ্রাম হিসাবে বলেছেন, আমার খারাপ bad আপনি পরবর্তী পদক্ষেপগুলি না করে আপনি সর্বদা সহজভাবে ফিরে আসতে পারেন।
ড্যানিয়েল বেক

tyvm - দুর্দান্ত কাজ!
kfmfe04

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