বাশ স্ক্রিপ্টের শেষে কোডটি প্রস্থান করুন


22

ব্যাশ স্ক্রিপ্টের শেষে আমি প্রস্থান কোডটির অর্থ সম্পর্কে বিভ্রান্ত হয়ে পড়েছি: আমি জানি যে প্রস্থান কোড 0 এর অর্থ এটি সফলভাবে শেষ হয়েছে, এবং আরও অনেক প্রস্থান কোড নম্বর রয়েছে (আমি ভুল না হলে 127)

আমার প্রশ্নটি যখন কোনও স্ক্রিপ্টের শেষে প্রস্থান কোড 0 দেখতে হয় তখন স্ক্রিপ্টটি ব্যর্থ হয় বা এর অন্য কোনও অর্থ হয় এমনকি এটি প্রস্থান কোডকে 0 হিসাবে জোর করে?


2
যদি কোনও স্ক্রিপ্ট শেষ হয় exit 0, এটি স্ক্রিপ্টের মধ্যে যা ঘটেছিল তা বিবেচনা না করে 0 এর প্রস্থান কোডের সাথে প্রস্থান করবে।
হাটক্লক

@ হটকাল আপনি কেন নিজের উত্তরটি পূর্ণ প্রতিশ্রুত উত্তর পোস্ট করলেন না? একটি মন্তব্য হিসাবে আমি এটি চিহ্নিত করতে পারি না, এবং আমি মনে করি না যে আপনি উত্তর দেওয়ার জন্য নকল ইন্টারনেট পয়েন্ট পেয়েছেন (ঠিক?) কেবল একটি চিন্তা ... (দ্রুত উত্তরের জন্য
কুডোস

1
আমি আমার ফোনের একটি ট্রেন স্টেশনে আছি, আমি আমার ফোনে খুব বেশি টাইপ করতে পছন্দ করি না। ইলকচু মনে হয় যদিও এর একটা ভাল উত্তর আছে!
হাটলক্লা


2
@ হটলক না, মোটেও নয়। যদি কোনও স্ক্রিপ্টটি শেষ হয় exit 0, কেবলমাত্র শেষ নির্দেশটি কার্যকর করা হলে তা কোড 0 দিয়ে প্রস্থান করবে। শুধুমাত্র প্রভাব exit 0স্ক্রিপ্ট শেষে পূর্ববর্তী নির্দেশ থেকে অবস্থা বদলে 0 ফিরে হয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

উত্তর:


22

বিল্টিন কমান্ড exitশেলটি ছাড়ায় ( বাশের উল্লেখ থেকে ):

exit [n]
শেল থেকে বের হয়ে শেলের পিতামাতার কাছে n এর একটি স্থিতি ফিরে আসবে। যদি n বাদ দেওয়া হয় তবে প্রস্থান স্থিতি হ'ল শেষ আদেশটি কার্যকর করা হয়। শেলটি শেষ হওয়ার আগে এক্সআইটি-তে কোনও ফাঁদ কার্যকর করা হয়।

ফাইলের শেষে চলে যাওয়াও শেষ হয়ে যায়, শেষ কমান্ডের রিটার্ন কোডটি ফিরিয়ে দেয়, সুতরাং হ্যাঁ, একটি ফাইনাল exit 0পূর্ববর্তী কমান্ডগুলির প্রস্থান স্থিতি ছাড়াই সফল স্থিতি সহ স্ক্রিপ্টটি প্রস্থান করে। (এটি অনুমান করে স্ক্রিপ্টটি ফাইনালে পৌঁছেছে ass exit) কোনও স্ক্রিপ্টের শেষে আপনি ব্যবহার করতেও trueবা :শূন্যের একটি প্রস্থান কোড পেতে পারেন ।

অবশ্যই প্রায়শই আপনি মাঝের স্ক্রিপ্টটি শেষ করতে exitএকটি এর ভিতর থেকে ব্যবহার ifকরতেন।

এগুলিতে একটি 1 মুদ্রণ করা উচিত ( $?পূর্ববর্তী কমান্ড দ্বারা ফিরে আসা প্রস্থান কোড রয়েছে):

sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?

যদিও এটিতে 0 টি মুদ্রণ করা উচিত:

sh -c "false; exit 0" ; echo $?

আমি নিশ্চিত নই যে কোনও স্ক্রিপ্ট exitদ্বারা চালিত স্ক্রিপ্টটির "ব্যর্থতা" ধারণাটি উপলব্ধি করে, কারণ স্ক্রিপ্টের দ্বারা চালিত কিছু কমান্ডের পক্ষে এটি ব্যর্থ হওয়া সম্ভব, তবে স্ক্রিপ্ট নিজেই সফল হয়। কোনটি সাফল্য এবং কোনটি নয় তা সিদ্ধান্ত নেওয়ার বিষয়টি স্ক্রিপ্টের লেখকের হাতে।

এছাড়াও, প্রস্থান কোডগুলির জন্য আদর্শ পরিসর 0..255। 127 এর উপরে কোডগুলি শেল দ্বারা একটি সিগন্যাল দ্বারা সমাপ্ত হওয়া প্রক্রিয়াটি নির্দেশ করতে ব্যবহৃত হয়, তবে সেগুলি স্বাভাবিক উপায়ে ফিরে পাওয়া যায়। waitঅপারেটিং সিস্টেম দ্বারা নির্ধারিত স্ট্যাটাস বিট বিশিষ্ট সিস্টেম কলটি প্রকৃতপক্ষে একটি বৃহত্তর মান প্রদান করে।


দুর্দান্ত, আমি 8 টি বিট প্রস্থান কোড নম্বরগুলি সম্পর্কে জানতাম না। ধন্যবাদ!
busted

মনে রাখবেন যে কোনও প্রক্রিয়া মারা গেলে, এটি একটি প্রস্থান কোড> 127 দিয়ে প্রস্থান করে না It's এটি কিছু শেল $?128 + সাইনামের ক্ষেত্রে সেট করে। প্রক্রিয়াটি শেষ হয়ে গেলে ডিফল্ট প্রস্থান কোডটি দেখুন ? বিস্তারিত জানার জন্য.
স্টাফেন চেজেলাস

exit 0প্রস্থানটি নির্বাহ করা হলে কেবল 0 প্রদান করবে। (এটি অন্য কোনও রুটে প্রস্থান করতে পারে)।
ctrl-alt-delor

18

0 মানে সাফল্য, ধনাত্মক পূর্ণসংখ্যার অর্থ ব্যর্থতা। এখানে 255 টি পৃথক ত্রুটি কোড রয়েছে, তবে 126 বা তদুর্ধের মানগুলি কোনও প্রোগ্রাম শুরু করতে (126 বা 127) বা সিগন্যালের (129 এবং উপরে) দ্বারা নিহত হওয়ার ইঙ্গিত দেওয়ার জন্য সংরক্ষিত রয়েছে। প্রক্রিয়াটি শেষ হয়ে গেলে ডিফল্ট প্রস্থান কোডটি দেখুন ? এবং ব্যাশ ফাংশন / স্ক্রিপ্টগুলিতে আমি কোন রিটার্ন / প্রস্থান মানগুলি ব্যবহার করতে পারি? আরও তথ্যের জন্য.

শেল স্ক্রিপ্টের প্রস্থান স্থিতি হ'ল স্ক্রিপ্টটি সম্পাদিত শেষ কমান্ডের প্রস্থান স্থিতি। উদাহরণস্বরূপ

#!/bin/sh
somecommand

প্রদর্শন করে প্রস্থান অবস্থা ফেরৎ somecommand, যেহেতু

#!/bin/sh
somecommand
exit 0

যা somecommandফিরে এসেছে তা নির্বিশেষে 0 প্রদান করে এই দ্বিতীয় লিপিটিও লেখা যেতে পারে

#!/bin/sh
somecommand
true

ফেলে exit 0একটি স্ক্রিপ্ট শেষে অগত্যা এটা 0. এটি কেবলমাত্র তা ফেরত 0 যখন স্ক্রিপ্ট শেষে পৌঁছে গেছেন হয় ফিরে যাওয়ার কারণ হবে না। উদাহরণস্বরূপ, নিম্নলিখিত লিপিটি সর্বদা 3:

#!/bin/sh
exit 3
exit 0

নিম্নলিখিত স্ক্রিপ্টটি সর্বদা একটি সিনট্যাক্স ত্রুটি সম্পর্কে বার্তা প্রদর্শন করা ছাড়াও একটি ত্রুটি কোড প্রদান করে:

#!/bin/sh
}
exit 0

নিম্নলিখিত যুক্তিটি তার প্রথম যুক্তির উপর নির্ভর করে 1 বা 0 দেয়:

#!/bin/sh
if [ "$1" = "foo" ]; then
  exit 1
fi
exit 0

নিম্নলিখিত স্ক্রিপ্টটির স্থিতি ফিরে আসে somecommand, যেহেতু ব্যর্থ হলে set -eস্ক্রিপ্টটি প্রস্থান করে somecommand:

#!/bin/sh
set -e
somecommand
exit 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.