যদি আমি প্রস্থানের আগে সিআরটিএল-সি (বা অনুরূপ) এবং ক্লিনআপ ধরার জন্য http://linuxcommand.org/wss0160.php#traptrap
তে বর্ণিত যেমন ব্যবহার করি তবে আমি ফিরে আসা প্রস্থান কোডটি পরিবর্তন করছি।
এখন এটি সম্ভবত আসল বিশ্বে তাত্পর্যপূর্ণ করবে না (উদাহরণস্বরূপ, প্রস্থান কোডগুলি পোর্টেবল নয় এবং এরপরে প্রসেসটি বন্ধ হয়ে যাওয়ার পরে ডিফল্ট প্রস্থান কোডে আলোচিত হিসাবে সবসময় দ্ব্যর্থহীন নয় ? ) তবে তবুও আমি ভাবছি যে সেখানে আছে কিনা? বাধা দেওয়ার পরিবর্তে বাধিত স্ক্রিপ্টগুলির জন্য ডিফল্ট ত্রুটি কোডটি ফেরত দেওয়ার কোনও উপায় নেই?
উদাহরণ (ব্যাশে, তবে আমার প্রশ্নটিকে ব্যাশ-নির্দিষ্ট বিবেচনা করা উচিত নয়):
#!/bin/bash
trap 'echo EXIT;' EXIT
read -p 'If you ctrl-c me now my return code will be the default for SIGTERM. ' _
trap 'echo SIGINT; exit 1;' INT
read -p 'If you ctrl-c me now my return code will be 1. ' _
আউটপুট:
$ ./test.sh # doing ctrl-c for 1st read
If you ctrl-c me now my return code will be the default for SIGTERM.
$ echo $?
130
$ ./test.sh # doing ctrl-c for 2nd read
If you ctrl-c me now my return code will be the default for SIGTERM.
If you ctrl-c me now my return code will be 1. SIGINT
EXIT
$ echo $?
1
(এটিকে আরও পজিক্স-কনফর্ম হিসাবে তৈরি করতে সরানোর জন্য সম্পাদিত))
(পরিবর্তে এটিকে বাশ স্ক্রিপ্ট তৈরি করতে আবার সম্পাদনা করা হয়েছে, আমার প্রশ্ন যদিও শেল-নির্দিষ্ট নয়))
অ-বহনযোগ্য "সাইন ইন" এর পক্ষে ফাঁদে ফেলার জন্য পোর্টেবল "INT" ব্যবহার করার জন্য সম্পাদিত।
অকেজো কোঁকড়ানো ধনুর্বন্ধনী অপসারণ এবং সম্ভাব্য সমাধান যুক্ত করতে সম্পাদিত।
হালনাগাদ:
হার্ডকডযুক্ত কিছু ত্রুটি কোডগুলি এবং এক্সিট ফাঁদে ফেলে কেবল এখনই আমি এটি সমাধান করেছি। এটি নির্দিষ্ট সিস্টেমে সমস্যাযুক্ত হতে পারে কারণ ত্রুটি কোডটি পৃথক হতে পারে বা এক্সিট ট্র্যাপটি সম্ভব না হলেও আমার ক্ষেত্রে এটি যথেষ্ট ঠিক OK
trap cleanup EXIT
trap 'exit 129' HUP
trap 'exit 130' INT
trap 'exit 143' TERM
read -p
যে বর্তমান কোপ্রোসেসের ইনপুটটি পড়ে।
read
বর্তমান coprocess থেকে পড়তে এবংtrap cmd SIGINT
মান হিসেবে কাজ করবে না বলে যা আপনি ব্যবহার করা উচিত নয়trap cmd INT
।