'সেট-ই' কী করে এবং কেন এটি বিপজ্জনক হিসাবে বিবেচিত হতে পারে?


147

এই প্রশ্নটি একটি প্রাক-সাক্ষাত্কারের কুইজে উপস্থিত হয়েছে এবং এটি আমাকে উন্মাদ করে তুলেছে। কেউ কি এর উত্তর দিতে পারে এবং আমাকে স্বাচ্ছন্দ্য দিতে পারে? কুইজে নির্দিষ্ট শেলের কোনও উল্লেখ নেই তবে কাজের বিবরণটি ইউনিক্স সা-এর জন্য for আবার প্রশ্নটি সহজভাবে ...

'সেট-ই' কী করে এবং কেন এটি বিপজ্জনক হিসাবে বিবেচিত হতে পারে?


এখানে একটি সম্পর্কিত থ্রেড এর stackoverflow.com/questions/64786/error-handling-in-bash/...
স্টিফান Lasiewski

উত্তর:


154

set -e যদি কোনও সাবকম্যান্ড বা পাইপলাইন একটি শূন্য-স্থিতি ফিরে আসে তবে শেলটি প্রস্থান করে।

সাক্ষাত্কারকারীর উত্তরটি সম্ভবত খুঁজছিল তা হ'ল:

Init.d স্ক্রিপ্ট তৈরি করার সময় "সেট-ই" ব্যবহার করা বিপজ্জনক হবে:

Http://www.debian.org/doc/debian-policy/ch-opersys.html 9.3.2 থেকে -

Init.d স্ক্রিপ্টগুলিতে সেট-ই ব্যবহার করতে সাবধান হন। সঠিক init.d স্ক্রিপ্টগুলি লেখার জন্য যখন ডিমানস ইতিমধ্যে চালানো হয় বা ইতিমধ্যে init.d স্ক্রিপ্টটি বাতিল না করেই বন্ধ হয়ে যায় তখন বিভিন্ন ত্রুটিযুক্ত প্রস্থান স্থিতি গ্রহণ করতে হবে এবং সাধারণ init.d ফাংশন লাইব্রেরি সেট-ই কার্যকরভাবে কল করা নিরাপদ নয়। Init.d স্ক্রিপ্টগুলির জন্য সেট-ই ব্যবহার না করা এবং প্রতিটি কমান্ডের ফলাফল পৃথকভাবে পরীক্ষা করা প্রায়শই সহজ।

এটি একটি সাক্ষাত্কার দৃষ্টিকোণ থেকে একটি বৈধ প্রশ্ন কারণ এটি সার্ভার-স্তরের স্ক্রিপ্টিং এবং অটোমেশনের জ্ঞানের জন্য প্রার্থীদের গজ করে


ভাল যুক্তি. এটি প্রযুক্তিগতভাবে একটি ত্রুটি হতে পারে এমন কোনও কারণে বুট প্রক্রিয়াটি থামিয়ে দেবে, তবে পুরো স্ক্রিপ্টটি থামিয়ে দেওয়া উচিত নয়
ম্যাট

যদিও আমি একমত stackoverflow.com/questions/78497/... , আমি এই শৈলী সংক্ষিপ্ত Init চেক এবং লগিং বা লক্ষ্য execing workload.We আমাদের Docker চিত্রের জন্য এই একই নীতি ব্যবহার করার আগে অন্যান্য পরিবেশ বানর প্যাচিং জন্য ব্যাশ সঙ্গে সুযোগ্য খুঁজে বের করে মনে init স্ক্রিপ্ট।
জোশপুরি

33

থেকে bash(1):

          -e      Exit immediately if a pipeline (which may consist  of  a
                  single  simple command),  a subshell command enclosed in
                  parentheses, or one of the commands executed as part  of
                  a  command  list  enclosed  by braces (see SHELL GRAMMAR
                  above) exits with a non-zero status.  The shell does not
                  exit  if  the  command that fails is part of the command
                  list immediately following a  while  or  until  keyword,
                  part  of  the  test  following  the  if or elif reserved
                  words, part of any command executed in a && or  ││  list
                  except  the  command  following  the final && or ││, any
                  command in a pipeline but the last, or if the  command’s
                  return  value  is being inverted with !.  A trap on ERR,
                  if set, is executed before the shell exits.  This option
                  applies to the shell environment and each subshell envi-
                  ronment separately (see  COMMAND  EXECUTION  ENVIRONMENT
                  above), and may cause subshells to exit before executing
                  all the commands in the subshell.

দুর্ভাগ্যক্রমে আমি কেন এটি বিপজ্জনক হবে তা ভেবে যথেষ্ট সৃজনশীল নই, "স্ক্রিপ্টের বাকী অংশটি কার্যকর হবে না" বা "এটি সম্ভবত সম্ভবত বাস্তব সমস্যার মুখোশ পাবে" ব্যতীত।


1
বাস্তব / অন্যান্য সমস্যার মাস্ক হাঁ, আমি দেখতে পারে ... আমি এটা বিপজ্জনক, পাশাপাশি হবার একটি উদাহরণ নিয়ে আসা সংগ্রাম ছিল ...
cpbills

ম্যানপেজ আছে set! আমি সবসময় শেষ builtin(1)। ধন্যবাদ।
জ্যারেড বেক

আমি কীভাবে জানতে পারি যে ডকুমেন্টেশনটি setহ'ল man 1 bash?? এবং এত বড় যে কোনও ম্যানুয়াল পৃষ্ঠায় কীওয়ার্ডের -eবিকল্পটি কীভাবে খুঁজে পেতে সক্ষম হবে set? আপনি /-eএখানে সন্ধান করতে পারবেন না
ব্লুহির্ন

@ ব্লাউহির্ন ব্যবহার করছেনhelp set
ব্লুহির্ন

19

এটি লক্ষ করা উচিত যে set -eকোনও স্ক্রিপ্টের বিভিন্ন বিভাগের জন্য চালু এবং বন্ধ করা যেতে পারে। পুরো স্ক্রিপ্টের কার্যকর করার জন্য এটি চালুর দরকার নেই। এটি এমনকি শর্তসাপেক্ষে সক্ষম হতে পারে। এটি বলেছে যে আমি নিজের ত্রুটিটি পরিচালনা করার (বা না) করার পরে আমি কখনও এটি ব্যবহার করি না।

some code
set -e     # same as set -o errexit
more code  # exit on non-zero status
set +e     # same as set +o errexit
more code  # no exit on non-zero status

trapকমান্ডের বাশ ম্যান পৃষ্ঠা বিভাগের এটিও লক্ষণীয়, যা set -eনির্দিষ্ট পরিস্থিতিতে কীভাবে কাজ করে তাও বর্ণনা করে ।

ERR ট্র্যাপ কার্যকর করা হয় না যদি ব্যর্থ কমান্ড তত্ক্ষণাত কমান্ড তালিকার অংশ থাকে বা কিছুক্ষণ পরে কীওয়ার্ড অবধি, যদি একটি বিবৃতিতে পরীক্ষার অংশ হয়, একটি && বা ⎪⎪ তালিকায় মৃত্যুদন্ড কার্যকর করা হয়, অথবা কমান্ডের হয় রিটার্ন মান মাধ্যমে উল্টানো হচ্ছে!। এই একই শর্তাবলী এররেক্সিট বিকল্প দ্বারা মেনে চলা।

সুতরাং কিছু শর্ত রয়েছে যার অধীনে একটি শূন্য-স্থিতি স্থিতি প্রস্থান করায় না।

আমি মনে করি যে বিপদটি কখন set -eখেলতে আসে এবং কখন তা না ঘটে এবং কোনও অবৈধ অনুমানের অধীনে ভুলভাবে নির্ভর করে understanding

দয়া করে দেখুন বাশফএকিউ / ১০ 105 কেন সেট-ই করেনি (বা সেট-ই এররেসিট বা ইআরআর সেট করবেন না) কেন আমি প্রত্যাশা করেছি?


প্রশ্নটি কিছুটা বিচ্যুত করার সময়, এই উত্তরটি ঠিক আমি যা খুঁজছি তা: এটি কোনও স্ক্রিপ্টের ছোট্ট অংশের জন্য বন্ধ করে দেওয়া!
স্টিফান বিজজিটার

13

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

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

আমি গত 2 বছরে সম্ভবত 40 টি চাকরীর সাক্ষাত্কারে অংশ নিয়েছি এবং সাক্ষাত্কারকারীরা মাঝে মাঝে এমন প্রশ্ন জিজ্ঞাসা করে যা ভুল, বা উত্তরগুলি ভুল wrong

অথবা হতে পারে এটি একটি কৌতুকপূর্ণ প্রশ্ন, যা খোঁড়া হবে, তবে সম্পূর্ণ অপ্রত্যাশিত নয়।

বা হতে পারে এটি একটি ভাল ব্যাখ্যা: http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg473314.html


1
+1 আমি একই নৌকায় আছি, এবং আমি যে 'প্রযুক্তিগত' সাক্ষাত্কারগুলি নিয়েছি সেগুলি অন্তত কিছুটা পথভ্রষ্ট হয়েছে।
সিপিবিল

1
কি দারুন. ডিবিয়ান তালিকায় ভাল সন্ধান করুন। সাক্ষাত্কারের প্রশ্নগুলির অজ্ঞতার জন্য +1। আমার মনে আছে যে আমি ঠিক 100% নিশ্চিত হওয়ার পরে একবারে নেটব্যাকের জবাবটি বিতর্ক করেছি। তারা বলল না। আমি বাড়িতে গিয়ে গুগল করেছিলাম, আমি ঠিক বলেছি।
উদয়

9

set -e স্ক্রিপ্টে বাশকে বলে, যখনই কোনও কিছু শূন্য-না ফেরতের মান ফিরে আসে exit

আমি দেখতে পেলাম যে এটি কীভাবে বিরক্তিকর হবে এবং বগী, বিপজ্জনক সম্পর্কে নিশ্চিত নয়, যদি আপনি কোনও কিছুর অনুমতি না খোলেন এবং এগুলি পুনরায় সীমাবদ্ধ করার আগে আপনার স্ক্রিপ্টটি মারা যায়।


ইহা আকর্ষণীয়. আমি কোনও স্ক্রিপ্টে অনুমোদনের বিষয়ে ভাবিনি যা অকাল মারা যায় তবে আমি দেখতে পেলাম যে এটি বিপজ্জনক বলে বিবেচিত হচ্ছে। এই কুইজের মজার অংশটি হ'ল আপনি ম্যান বা গুগলের মতো কোনও রেফারেন্স উপকরণ ব্যবহার করতে পারবেন না এবং আপনি যদি পুরোপুরি উত্তর না দিতে পারেন তবে এর কোনও উত্তর দেবেন না।
উদ্বিগ্ন

6
এটি কেবল নির্বোধ, আমি এই নিয়োগকর্তাকে পুনর্বিবেচনা করব ... মজা করছি (সাজানো)। জ্ঞানের একটি শক্তিশালী ভিত্তি থাকা ভাল তবে এটি তথ্য অর্ধেক জানা / কোথায় / তথ্য সন্ধান করার জন্য রয়েছে ... আশা করি আবেদনকারীদের স্কোর করার সময় তারা এটিকে বিবেচনায় নিতে যথেষ্ট স্মার্ট ছিল were পার্শ্ব নোটে, আমি দেখতে পাচ্ছি / না / ব্যবহার করার জন্য set -e, আসলে আমার কাছে এটি আপনার স্ক্রিপ্টগুলিতে ত্রুটি পরীক্ষা করা উপেক্ষা করার জন্য অলসতার কথা বলে ... তাই এই নিয়োগকর্তাকেও মনে রাখবেন ... তারা যদি এটি ব্যবহার করে তবে অনেকগুলি, তাদের স্ক্রিপ্টগুলি দেখতে কেমন, আপনাকে অনিবার্যভাবে বজায় রাখতে হবে ...
সিপিবিলে

দুর্দান্ত পয়েন্ট @ সিপিবিলে। আমি কোনও স্ক্রিপ্টে সেট-ইয়ের জন্য কোনও ব্যবহার দেখতে পাচ্ছি না এবং এটিই কেন আমাকে এত স্টম্প করেছে। আমি সমস্ত প্রশ্ন পোস্ট করতে চাই যেহেতু কিছু সত্যই ভাল এবং কিছু সত্যই অদম্য এবং এ জাতীয় মত এলোমেলো হয়।
উদয়

আমি এটি অনেক সিস্টেমে ক্রোন জবগুলিতে দেখেছি ...
অ্যান্ড্রু

8

set -eকোনও শর্ত ছাড়াই যদি কোনও ননজারো প্রস্থান কোডের মুখোমুখি হয় তবে স্ক্রিপ্টটি সমাপ্ত করে। কয়েকটি শব্দে এর ব্যবহারের বিপদগুলি সংক্ষিপ্ত করতে: এটি কীভাবে লোকেরা মনে করে এটি আচরণ করে না।

আমার মতে, এটিকে একটি বিপজ্জনক হ্যাক হিসাবে বিবেচনা করা উচিত যা কেবলমাত্র সামঞ্জস্যের উদ্দেশ্যেই অব্যাহত রয়েছে। set -eবিবৃতি ব্যতিক্রম মত নিয়ন্ত্রণ প্রবাহ ব্যবহার করে একটি ভাষায় ত্রুটি কোডের ব্যবহার করে এমন ভাষা থেকে শেল চালু না, এটি নিছক দুর্বল যে আচরণ অনুকরণ করতে চেষ্টা করে।

এর ঝুঁকি সম্পর্কে গ্রেগ উওলানার অনেক কথা রয়েছে set -e:

দ্বিতীয় লিঙ্কে, এর অপ্রচলিত এবং অপ্রত্যাশিত আচরণের বিভিন্ন উদাহরণ রয়েছে set -e

এর অনিচ্ছাকৃত আচরণের কয়েকটি উদাহরণ set -e(কিছু উপরে উইকি লিঙ্ক থেকে নেওয়া):

  • সেট -ই
    এক্স = 0
    এক্স ++ দিন
    প্রতিধ্বনি "x হল $ x"
    উপরের ফলে শেল স্ক্রিপ্ট অকালমূখ প্রস্থান করবে, কারণ let x++0 প্রদান করে, যা মূল letশব্দ দ্বারা মিথ্যা মান হিসাবে বিবেচিত হয় এবং ননজারো প্রস্থান কোডে পরিণত হয়। set -eএটি লক্ষ্য করে এবং নিঃশব্দে স্ক্রিপ্টটি সমাপ্ত করে।
  • সেট -ই
    [-d / opt / foo] && প্রতিধ্বনি "সতর্কতা: foo ইতিমধ্যে ইনস্টল করা আছে overw ওভাররাইট হবে।" > & 2
    প্রতিস্থাপন "ফু ইনস্টল করা হচ্ছে ..."
    

    উপরেরটি প্রত্যাশা মতো কাজ করে, /opt/fooইতিমধ্যে উপস্থিত থাকলে একটি সতর্কতা মুদ্রণ করে ।

    সেট -ই
    চেক_প্রিয়ার_ইনস্টল () {
        [-d / opt / foo] && প্রতিধ্বনি "সতর্কতা: foo ইতিমধ্যে ইনস্টল করা আছে overw ওভাররাইট হবে।" > & 2
    }
    
    check_previous_install
    প্রতিস্থাপন "ফু ইনস্টল করা হচ্ছে ..."
    

    উপরোক্ত, একমাত্র পার্থক্য থাকা সত্ত্বেও যে কোনও একক লাইন একটি ফাংশনে রিফ্যাক্টর হয়েছে, /opt/fooবিদ্যমান না থাকলে তা সমাপ্ত হবে । এটি কারণ যে এটি মূলত কাজ করেছিল তা set -eআচরণের একটি বিশেষ ব্যতিক্রম । a && bননজারো যখন ফেরত দেয়, তখন এটি এড়ানো হবে set -e। যাইহোক, এখন এটি একটি ফাংশন, ফাংশনটির প্রস্থান কোড the কমান্ডের প্রস্থান কোডের সমান, এবং নানজারো ফাংশনটি ফিরছে নীরবে স্ক্রিপ্টটি সমাপ্ত করবে।

  • সেট -ই
    আইএফএস = $ '\ n' রিড-ডি '' -r -a কনফিগারেশন_ভার্স <কনফিগারেশন
    

    উপরের config_varsফাইলটি থেকে অ্যারেটি পড়বে config। যেমনটি লেখকের উদ্দেশ্য হতে পারে, configঅনুপস্থিত থাকলে এটি একটি ত্রুটি দিয়ে শেষ করে । যেহেতু লেখকের উদ্দেশ্য নেই, এটি configকোনও নতুন লাইনে শেষ না হলে নীরবে এটি শেষ করে। যদি set -eএখানে ব্যবহার না করা হয় config_varsতবে ফাইলের সমস্ত লাইন এতে একটি নতুন লাইনে শেষ হয়েছে কিনা তা অন্তর্ভুক্ত থাকবে।

    সাব্লাইম টেক্সটের ব্যবহারকারী (এবং অন্যান্য পাঠ্য সম্পাদক যারা নিউলাইনগুলি ভুলভাবে পরিচালনা করে), সাবধান হন।

  • সেট -ই
    
    should_audit_user () {
        স্থানীয় গোষ্ঠী গোষ্ঠী = "$ (গোষ্ঠী" $ 1 ")"
        $ দলে গ্রুপের জন্য; করা
            যদি ["$ গ্রুপ" = নিরীক্ষণ]; তারপরে 0 ফিরে আসুন; ফাই
        সম্পন্ন
        প্রত্যাবর্তন 1
    }
    
    যদি should_audit_user "$ ব্যবহারকারী"; তারপর
        লগার 'ব্লাহ'
    ফাই
    

    লেখক এখানে যুক্তিযুক্তভাবে আশা করতে পারেন যে কোনও কারণে যদি ব্যবহারকারী $userউপস্থিত না থাকে তবে groupsকমান্ডটি ব্যর্থ হবে এবং ব্যবহারকারীর কিছু কাজ বিনা বিচারে সম্পাদন করার পরিবর্তে স্ক্রিপ্টটি বন্ধ হয়ে যাবে। যাইহোক, এক্ষেত্রে set -eঅবসান কার্যকর হয় না। যদি $userকোনও কারণে খুঁজে পাওয়া না যায়, স্ক্রিপ্টটি বন্ধ করার পরিবর্তে, should_audit_userফাংশনটি কেবলমাত্র set -eকার্যকর ডেটার মতো কার্যকর তথ্য ফিরিয়ে দেবে ।

    এটি ifবিবৃতিটির শর্তের অংশ থেকে আহ্বান করা কোনও ক্রিয়াকলাপের ক্ষেত্রে প্রযোজ্য , যতই গভীরভাবে বাসা বেঁধে দেওয়া হোক না কেন, যেখানেই এটি সংজ্ঞায়িত করা হোক না কেন, আপনি set -eএটির ভিতরে আবারও দৌড়ান কিনা । শর্ত ব্লক সম্পূর্ণরূপে সম্পাদিত না হওয়া পর্যন্ত যে ifকোনও পয়েন্টে ব্যবহার সম্পূর্ণরূপে এর প্রভাবকে অক্ষম করে set -e। লেখক যদি এই ক্ষতির বিষয়ে অবগত না হন বা কোনও সম্ভাব্য পরিস্থিতিতে যেখানে ফাংশন বলা যেতে পারে তাদের পুরো কল স্ট্যাকটি জানেন না, তবে তারা বাগি কোড লিখবেন এবং প্রদত্ত সুরক্ষার ভ্রান্ত ধারণাটি set -eকমপক্ষে আংশিকভাবে হবে দোষারোপ।

    এমনকি লেখক যদি এই ক্ষতির বিষয়ে পুরোপুরি অবগত হন, তবুও কার্যবিবরণী কোডটি একইভাবে লিখতে হয় যেহেতু কেউ এটি ছাড়াই লিখতে পারে set -e, কার্যকরভাবে সেই সুইচটিকে অকেজোের চেয়ে কম উপস্থাপন করে; কেবল লেখককে ম্যানুয়াল ত্রুটি পরিচালনা করার কোডটি লিখতে হবে যেমন set -eকার্যকর ছিল না, তবে উপস্থিতি set -eতাদের ভেবে ভ্রষ্ট করেছে যে তাদের তা করতে হবে না।

এর আরও কিছু ত্রুটি set -e:

  • এটি স্লোপি কোডকে উত্সাহ দেয়। ত্রুটি পরিচালনাকারীরা সম্পূর্ণরূপে ভুলে যায়, এই আশায় যে যা কিছু ব্যর্থ হয়েছে ত্রুটিটি কিছু বুদ্ধিমান উপায়ে রিপোর্ট করবে। যাইহোক, let x++উপরের মতো উদাহরণ সহ , এটি ক্ষেত্রে নয়। যদি স্ক্রিপ্টটি অপ্রত্যাশিতভাবে মারা যায়, তবে এটি সাধারণত নীরবে থাকে, যা ডিবাগ করতে বাধা দেয়। যদি স্ক্রিপ্টটি মারা না যায় এবং আপনি এটি (পূর্ববর্তী বুলেট পয়েন্টটি দেখুন) প্রত্যাশা করেছিলেন, তবে আপনার হাতে আরও সূক্ষ্ম এবং कपে বাগ রয়েছে।
  • এটি মানুষকে সুরক্ষার একটি মিথ্যা অনুভূতির দিকে নিয়ে যায়। আবার ifশর্তে -শক্তি বুলেট পয়েন্টটি দেখুন।
  • যে জায়গাগুলিতে শেলটি শেষ হয় সেগুলি শেল বা শেল সংস্করণের মধ্যে সামঞ্জস্যপূর্ণ নয়। দুর্ভাগ্যক্রমে কোনও স্ক্রিপ্ট লেখা সম্ভব যা বাশনের পুরানো সংস্করণে ভিন্ন রূপে আচরণ করে set -ethose সংস্করণগুলির মধ্যে টুইট করা হয়েছে।

set -eএটি একটি বিতর্কিত সমস্যা এবং এর আশেপাশের সমস্যাগুলি সম্পর্কে সচেতন কিছু লোকেরা এর বিরুদ্ধে সুপারিশ করেন, আবার কিছু লোক সমস্যাগুলি জানার জন্য সক্রিয় থাকাকালীন কেবল যত্ন নেওয়ার পরামর্শ দেন। অনেকগুলি শেল স্ক্রিপ্টিং newbies রয়েছে যারা set -eত্রুটির অবস্থার জন্য সমস্ত স্ক্রিপ্টগুলিকে ক্যাচ-অল হিসাবে সুপারিশ করে তবে বাস্তব জীবনে এটি সেভাবে কাজ করে না।

set -e শিক্ষার বিকল্প নেই।


2

আমি বলব এটি বিপজ্জনক কারণ তিনি আপনার স্ক্রিপ্টটি আর প্রবাহিত করতে পারেন না। স্ক্রিপ্টটি যে কোনও কমান্ডকে স্ক্রিপ্টটি অনুরোধ করে যতক্ষণ না শূন্যকে ফিরিয়ে দেয় ততক্ষণ বন্ধ করতে পারে। সুতরাং আপনাকে যা করতে হবে তা হ'ল এমন কিছু করা যা কোনও উপাদানগুলির আচরণ বা আউটপুটকে পরিবর্তন করে এবং আপনি মূল স্ক্রিপ্টটি সমাপ্ত করতে পারেন। এটি কোনও শৈলীর সমস্যা হতে পারে তবে এর অবশ্যই পরিণতি হতে পারে। যদি আপনার সেই প্রধান স্ক্রিপ্টটি কিছু পতাকা সেট করার কথা বলে, এবং এটি তাড়াতাড়ি বন্ধ হয়ে যায় বলে? আপনি যদি সিস্টেমটির বাকী পতাকাটি সেখানে থাকা উচিত বলে মনে করেন বা অপ্রত্যাশিত ডিফল্ট বা পুরানো মান নিয়ে কাজ করে থাকেন তবে আপনি বাকী অংশটিকে দোষ দিয়ে শেষ করবেন।


সম্পূর্ণরূপে এই উত্তর সাথে একমত। এটি সহজাতভাবে বিপজ্জনক নয়, তবে এটি অপ্রত্যাশিত প্রারম্ভিক প্রস্থান করার সুযোগ।
pboin

1
এটি আমাকে যা মনে করিয়ে দেয় তা হ'ল আমার একটি সি ++ প্রোফার যা প্রোগ্রামে সর্বদা একা প্রবেশ পয়েন্ট / একক বহির্গমন পয়েন্ট না থাকার জন্য আমার অ্যাসাইনমেন্টগুলি থেকে পয়েন্টগুলি টানত। আমি ভেবেছিলাম এটি নিখুঁতভাবে একটি 'নীতি' জিনিস, তবে এই সেট-ব্যবসায়টি কীভাবে এবং কেন নিয়ন্ত্রণগুলি পুরোপুরি নিয়ন্ত্রণের বাইরে চলে যেতে পারে তা নিশ্চিতভাবেই তা হ্রাস করে। শেষ পর্যন্ত প্রোগ্রামগুলি নিয়ন্ত্রণ এবং নির্ধারণবাদ সম্পর্কে, এবং অকালিক সমাপ্তির সাথে আপনি উভয়ই ত্যাগ করেন।
মার্সিন

0

@ মার্সিনের উত্তরের আরও দৃ concrete় উদাহরণ হিসাবে যা আমাকে ব্যক্তিগতভাবে দংশিত করেছে, ভাবুন rm foo/bar.txtআপনার স্ক্রিপ্টে কোথাও একটি লাইন ছিল । সাধারণত foo/bar.txtঅস্তিত্ব না থাকলে কোনও বড় চুক্তি হয় না। তবে set -eবর্তমানে আপনার স্ক্রিপ্ট খুব তাড়াতাড়ি শেষ হবে! উফ।

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