যদিও এখানে পূর্ববর্তী উত্তরগুলি সমস্তই পরিপূর্ণতার প্রয়োজনীয়তা পূরণ করে, তবুও আপনি কাজগুলি শেষ হওয়ার সাথে সাথে আপনার যন্ত্রটি বন্ধ করে দিতে পারেন।
bashস্ক্রিপ্টগুলি trapপ্যাড হতে পারে , যার অর্থ নির্দিষ্ট সংকেতগুলি বাধা দেওয়া যেতে পারে এবং প্রয়োজনে নির্দিষ্ট কাজগুলি সম্পাদন করা যেতে পারে।EXITআটকে যেতে পারে এমন একটি সংকেত।
আপনি সক্ষম হবেন:
- আপনার স্বয়ংক্রিয় শেল স্ক্রিপ্টগুলির
trapজন্য একটি সেট করুন EXIT, যার অর্থ আপনার স্বয়ংক্রিয় কর্মের সমাপ্তি
trapআপনার জন্য একটি সেট করুন .bashrc EXIT, আপনি যখনই সেই মেশিনটি থেকে লগ আউট করবেন তখন এটি বন্ধ করে দিন।
বিকল্প # 1 আদর্শ কেস হবে, যদি আপনার কাজগুলিতে অ্যাডহক পরিদর্শন এবং ম্যানুয়াল রায় প্রয়োজন না হয়।
বিকল্প # 2 কেসগুলি কভার করবে যেখানে আপনি বিদ্যুৎ বন্ধ না করে টার্মিনালটি থেকে বেরিয়ে যেতে ভুলে যাবেন। যদিও একটি সতর্কতা আছে; যদি আপনার একই মেশিনে একাধিক টার্মিনাল খোলা থাকে এবং আপনি সেগুলির একটি থেকে প্রস্থান করেন, এটি এখনও মেশিনটিকে সমস্ত একইভাবে বন্ধ করে দেবে। (এটি এড়ানোর জন্য এটি স্ক্রিপ্ট করা যেতে পারে, তবে আমি সমাধানটি জটিল করব না))
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
এটি .bashrcবিকল্প # 2 এর শেষে হতে পারে , বিকল্পের জন্য 1 এর জন্য আপনার স্ক্রিপ্টের শীর্ষে # 1।
poweroffস্ক্রিপ্টের শেষে ব্যবহার করবেন না কেন ?
আমি set -eo pipefailআমার স্ক্রিপ্টগুলির শীর্ষে ব্যবহার করতে পছন্দ করি। যদি কোনও ত্রুটি ঘটে তবে তা নিঃশব্দে ব্যর্থ হবে না; এটি আরও কমান্ড কার্যকর করা বন্ধ করবে। trapএর EXITসংকেত ক্ষেত্রে যেখানে স্ক্রিপ্ট ত্রুটির কারণে অকালে বন্ধ ঢেকে রাখুক।
তবে আপনার কার্যগুলির জন্য, এর অর্থ এইও হতে পারে যে মেশিনটি সম্পূর্ণ হওয়ার আগেই এটি বন্ধ হয়ে যাবে।
bashস্ক্রিপ্টিংটি ডিবাগ করা সহজতর করার জন্য আমার একটি সাধারণ টেম্পলেট রয়েছে; সম্ভবত এটি কিছু কাজে লাগতে পারে। অনুগ্রহ করে দেখুন এই সারকথা ।
at(এককালীন কার্যকর)