ব্যাশ স্ক্রিপ্টগুলিতে 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.