-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.