আপনি কি সৃজনশীল এবং জড়িত সংকেতগুলি বলছেন? ঠিক আছে:
trap on_exit EXIT
trap on_usr1 USR1
on_exit() {
history -a
trap '' USR1
killall -u "$USER" -USR1 bash
}
on_usr1() {
history -n
}
Uckোকাও .bashrcএবং যাও। এটি অন্য bashপ্রক্রিয়াটি যখন প্রস্থান করে তখন নতুন ইতিহাসের এন্ট্রিগুলি পরীক্ষা করার জন্য প্রতিটি প্রক্রিয়াটি বলতে সংকেত ব্যবহার করে । এটি বেশ ভয়াবহ, তবে এটি সত্যই কার্যকর।
এটা কিভাবে কাজ করে?
trapসিস্টেম সিগন্যাল বা বাশের কোনও অভ্যন্তরীণ ইভেন্টের জন্য সিগন্যাল হ্যান্ডলার সেট করে। EXITঘটনা, যখন শেল কোন নিয়ন্ত্রিত পরিসমাপ্তি হয় USR1হয় SIGUSR1, একটি অর্থহীন সংকেত আমরা যথার্থ করার করছি।
যখনই শেলটি প্রস্থান করে, আমরা:
- সমস্ত ইতিহাস স্পষ্টতই ফাইলটিতে যুক্ত করুন।
SIGUSR1হ্যান্ডলারটি অক্ষম করুন এবং এই শেলটি সিগন্যালটিকে উপেক্ষা করুন।
bashএকই ব্যবহারকারীর সমস্ত চলমান প্রক্রিয়াতে সংকেত প্রেরণ করুন ।
যখন একটি SIGUSR1আসে, আমরা:
- ইতিহাসের ফাইল থেকে সমস্ত নতুন এন্ট্রি শেলের মেমোরি ইতিহাস তালিকায় লোড করুন।
বাশ যেভাবে সংকেতগুলি পরিচালনা করে, আপনি Enterপরবর্তী বার আঘাত না করা পর্যন্ত আপনি আসলে নতুন ইতিহাসের ডেটা পাবেন না , সুতরাং এটি সম্মুখের history -nদিকে রাখার চেয়ে আর ভাল কিছু করতে পারে না PROMPT_COMMAND। যদিও কিছুই ঘটেনি ততক্ষণ এই ফাইলটি অবিচ্ছিন্নভাবে সংরক্ষণ করা যায় এবং শেলটি বের না হওয়া অবধি কোনও লেখা নেই।
এখনও এখানে বেশ কয়েকটি ইস্যু রয়েছে। প্রথমটি হ'ল ডিফল্ট প্রতিক্রিয়া SIGUSR1হ'ল শেলটি সমাপ্ত করা । অন্য কোনও bashপ্রক্রিয়া (উদাহরণস্বরূপ শেল স্ক্রিপ্টগুলি চালানো) মারা যাবে। .bashrcঅ-ইন্টারেক্টিভ শেল দ্বারা লোড করা হয় না। পরিবর্তে, নামের একটি ফাইল BASH_ENVলোড করা হয়েছে : আপনি বিশ্বব্যাপী আপনার পরিবেশে সেই পরিবর্তনশীলটি একটি ফাইলের সাথে নির্দেশ করতে পারেন:
trap '' USR1
এতে তাদের মধ্যে সংকেত উপেক্ষা করার জন্য (যা সমস্যার সমাধান করে)।
সবশেষে, যদিও আপনি যা চেয়েছিলেন এটি তা করে, আপনি যে ক্রমটি অর্ডার করেছেন সেটি কিছুটা অস্বাভাবিক হবে। বিশেষত, ইতিহাসের বিটগুলি লোড হওয়া এবং আলাদাভাবে সংরক্ষণ করার কারণে বিভিন্ন ক্রমে পুনরাবৃত্তি হবে। এটি যা আপনি চাইছেন তা মূলত অন্তর্নিহিত, তবে সচেতন থাকবেন যে আপ-তীরের ইতিহাসটি এই মুহুর্তে অনেক কম দরকারী হয়ে ওঠে। যদিও ইতিহাসের বিকল্পগুলি এবং এর মতো ভাগ করা হবে এবং ভালভাবে কাজ করবে।