বাশ স্ক্রিপ্টটি প্রস্থান হওয়ার আগে কীভাবে একটি কমান্ড চালানো যায়?


119

যদি কোনও বাশ স্ক্রিপ্ট থাকে set -eএবং স্ক্রিপ্টের একটি কমান্ড একটি ত্রুটি ফিরিয়ে দেয়, স্ক্রিপ্টটি প্রস্থান হওয়ার আগে আমি কীভাবে কিছু পরিষ্কার করতে পারি?

উদাহরণ স্বরূপ:

#!/bin/bash
set -e
mkdir /tmp/foo
# ... do stuff ...
rm -r /tmp/foo

/tmp/fooকমান্ডগুলির ... do stuff ...একটিরও ব্যর্থ হওয়া সত্ত্বেও আমি কীভাবে তা সরিয়ে ফেলা নিশ্চিত করব ?

উত্তর:


193

ফাঁদ ব্যবহারের উদাহরণ এখানে:

#!/bin/bash -e

function cleanup {
  echo "Removing /tmp/foo"
  rm  -r /tmp/foo
}

trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails

আউটপুট:

dbrown@luxury:~ $ sh traptest
t: line 9: asdffdsa: command not found
Removing /tmp/foo
dbrown@luxury:~ $

লক্ষ্য করুন যে এসডেস্ফডসসা লাইন ব্যর্থ হলেও, পরিষ্কারটি এখনও কার্যকর হয়েছিল was


11

bashম্যানপেজ থেকে (বিল্টইন সম্পর্কিত):

trap [-lp] [[arg] sigspec ...]
শেল সিগন্যাল (গুলি) সিগস্পেক পেলে আর্ট কমান্ডটি পড়তে হবে এবং সম্পাদন করতে হয়।

সুতরাং, আননের উত্তর হিসাবে ইঙ্গিত করা হয়েছে , trapইআরআর আপনার পছন্দসই হ্যান্ডলারটি সেট আপ করতে স্ক্রিপ্টের প্রথম দিকে কল করুন।


help trapঅন্তর্নির্মিতটিতে কিছু সহায়তা দেখতে দৌড়াও ।
ফ্লিম

8

এর রেফারেন্স থেকে set:

-e

যদি কোনও সরল কমান্ড (বিভাগ 3.2.1 দেখুন সরল কমান্ডগুলি) শূন্য-স্থিতি স্থিতি না করে অবিলম্বে প্রস্থান করুন, যদি না কমান্ডটি ব্যর্থ হয় যদি না লুপ অবধি একটি আইএফ স্টেটমেন্টের অংশ না হয়, একটি && বা || তালিকা বা যদি কমান্ডের রিটার্নের স্থিতি উল্টানো হচ্ছে! ERR এ একটি ফাঁদ সেট করা থাকলে শেলটি বেরোনোর ​​আগেই সম্পাদিত হয়।

(জোর আমার)।


"-E" ব্যবহার করার সময় "-E" যুক্ত করার মতো হতে পারে, ভ্যানিইকটি.আইও
ম্যাক্স ব্যারাকলফ

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