-E একটি বাশ স্ক্রিপ্টের মধ্যে সেট করা আছে কিনা তা পরীক্ষা করা সম্ভব?


9

যদি শেল ফাংশনটির কাজ করার জন্য -e / + e এর একটি নির্দিষ্ট সেটিংসের প্রয়োজন হয় তবে ফাংশনটি থেকে বেরিয়ে আসার আগে স্থানীয়ভাবে সেটিংটি সেট করা এবং তার পূর্ববর্তী সেটিংসে পুনরুদ্ধার করা সম্ভব?

myfunction()
{
   # Query here if -e is set and remember in a variable?
   # Or push the settings to then pop at the end of the function?
   set +e
   dosomething
   doanotherthing
   # Restore -e/+e as appropriate, don't just do unconditional   set -e
}

উত্তর:


12

আপনার কাছে বর্তমানে পরিবর্তনশীলগুলিতে পতাকাগুলি সেট করা আছে $-, তাই আপনি এটি ফাংশনের শুরুতে সংরক্ষণ করতে পারেন এবং এটির পরে পুনরুদ্ধার করতে পারেন।

save=$-
...
if [[ $save =~ e ]]
then set -e
else set +e
fi

এটি লক্ষ করা উচিত যে $-এটিও কাজ করে /bin/shএবং সম্ভবত এটির বিশ্লেষণ করার জন্য আপনার বাশিজমের দরকার নেই, কেবল উদাহরণস্বরূপ গ্লাবিং ব্যবহার করুন যা caseসরবরাহ করে
— জোসিপ রডিন

2

আপনি পরিবর্তনশীল শেলপপ্টসের মাধ্যমে পতাকাটির মানটি পড়তে পারেন:

  > set +e 
  > echo $SHELLOPTS
    braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
  > set -e 
  > echo $SHELLOPTS
    braceexpand:emacs:errexit:hashall:histexpand:history:interactive-comments:monitor

আপনি যে, সেটিং পর দেখতে set -e, মান errexitমধ্যে $SHELLOPTSপ্রদর্শিত হয়। আপনি সেখান থেকে এটি পরীক্ষা করতে পারেন।

তবে নীচের বিষয়টিকে স্মরণ করে আপনি এটি (যদি আপনি চান!) পেতে পারেন: ম্যানুয়াল অনুসারে :

-e :

..... এই বিকল্পটি শেল পরিবেশ এবং প্রতিটি সাব-শেল এনভায়রনমেন্টের জন্য আলাদাভাবে প্রযোজ্য।

এইভাবে, যদি আপনি একটি সাবশেলে আপনার ফাংশনটি কার্যকর করেন তবে like

   zz="$(myfunction)"

errexitকলিং পরিবেশে চলকটি সেট করা আছে কি না আপনার চিন্তার কোনও দরকার নেই এবং আপনি নিজের পছন্দ মতো সেট করতে পারেন।


ধন্যবাদ, শেল্যাপস সচেতন হওয়ার জন্য দরকারী। আমি খুঁজে পেয়েছি @ - @meuh দ্বারা প্রস্তাবিত প্রোগ্রামোগ্রাফিকভাবে চেক করা সহজ যদিও, এই কারণেই আমি উত্তরটি স্বীকার করেছি।
— usta

সাবশেলগুলি সম্পর্কে নোটটিও দরকারী, তবে আমি কল সাইটগুলিতে পরিবর্তন এড়াতে চেয়েছিলাম। অন্যথায় আমি সম্ভবত myfunctionকলগুলির জন্য myfunction || true-e এর প্রভাবকে দমন করতে কলগুলি পরিবর্তন করব set +eএবং প্রথম স্থানে ফাংশনের অভ্যন্তরে না করতে হবে ।
— usta

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