ব্যাশ স্ক্রিপ্টগুলিতে Ctrl-C


22

আমি কিভাবে বাস্তবায়ন করবেন ctrl+ + c, ব্যাশ স্ক্রিপ্ট যাতে স্ক্রিপ্ট বিঘ্নিত হয় হ্যান্ডলিং ভাল স্ক্রিপ্ট চালু বর্তমানে চলমান কমান্ড হিসাবে হিসাবে?

(কল্পনা করুন যে কোনও স্ক্রিপ্ট রয়েছে যা কিছু দীর্ঘমেয়াদী কমান্ড কার্যকর করে The ব্যবহারকারী ctrl+ cটিপুন এবং কমান্ডটি বাধাগ্রস্ত করে তবে স্ক্রিপ্টটি এগিয়ে যায়)) উভয়কে মেরে ফেলা হয়েছে এমনভাবে আমার আচরণ করা দরকার need


1
যদি আপনার ওএসে জব-নিয়ন্ত্রণ সক্ষম থাকে, তবে অন্য বিকল্পটি সেই স্ক্রিপ্টটি বন্ধ করা হবে (সাধারণত crtl-z সহ)। আপনি সেই কাজটি পটভূমিতে চালিয়ে যেতে bg, হত্যা করতে বা এর সাথে অগ্রভাগে চালিয়ে যেতে পারেন fg। বাশ ম্যানপেজ বিভাগটি দেখুন JOB CONTROL।
— অট--

উত্তর:


25

আপনি SIGNT প্রাপ্তির পরে কল করতে চান এমন একটি সাবরুটিন তৈরি করে এটি করুন এবং আপনার চালনার দরকার trap 'subroutinename' INT।

উদাহরণ:

#!/bin/bash

int_handler()
{
    echo "Interrupted."
    # Kill the parent process of the script.
    kill $PPID
    exit 1
}
trap 'int_handler' INT

while true; do
    sleep 1
    echo "I'm still alive!"
done

# We never reach this part.
exit 0

2
মনে রাখবেন যে EXITস্ক্রিপ্টটি যেভাবে বন্ধ হয়ে গেছে তা নির্ধারণ না করে যে কোনও সময় আপনি কার্যকর করতে চান এমন কিছু ক্ষেত্রে আপনি ফাঁদে ফেলতে পারেন । ( KILLঅবশ্যই বাদ।)
— Blrfl

দুর্দান্ত, ধন্যবাদ! তবে, যখন 'ঘুম' মারা যায় - ফাঁদ রুটিন চলাকালীন শেলটি পরবর্তী কমান্ডটি কার্যকর করতে সক্ষম হতে পারে: এই ক্ষেত্রে 'প্রতিধ্বনি' ... বা আমি ভুল?
— kolypto

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