বাশের PROMPT_COMMAND এ Byুকিয়ে এই ফাংশনটি প্রতিবার নতুন প্রম্পট পেলে চালিত হয়, তাই আপনি কাস্টম ইতিহাস চাইছেন এমন কোনও ডিরেক্টরিতে আছেন কিনা তা যাচাই করার জন্য এটি একটি শালীন সময়। ফাংশনটির চারটি প্রধান শাখা রয়েছে:
- যদি বর্তমান ডিরেক্টরি (
$PWD
) পরিবর্তন না হয়, তবে কিছুই (রিটার্ন) করবেন না।
গণপূর্ত বিভাগের তাহলে করেছেন পরিবর্তিত, তাহলে আমরা একটি স্থানীয় ফাংশন যার একমাত্র উদ্দেশ্য ফ্যাক্টর এক স্থানে "কাস্টম ডিরেক্টরি" কোড সেট আপ করুন। আপনি আমার পরীক্ষা-ডিরেক্টরিগুলি আপনার নিজের দ্বারা পৃথক করতে চান (দ্বারা পৃথক |
)।
- যদি আমরা কোনও কাস্টম ডিরেক্টরিতে বা এর বাইরে না গিয়ে থাকি তবে কেবল "পূর্ববর্তী ডিরেক্টরি" ভেরিয়েবলটি আপডেট করুন এবং ফাংশন থেকে ফিরে আসুন।
যেহেতু আমরা ডিরেক্টরিগুলি পরিবর্তন করেছি, "পূর্ববর্তী ডিরেক্টরি" ভেরিয়েবলটি আপডেট করুন, তারপরে ইন-মেমরির ইতিহাসটিকে HISTFILE এ সংরক্ষণ করুন, তারপরে ইন-মেমরির ইতিহাস সাফ করুন।
যদি আমরা একটি কাস্টম ডিরেক্টরিতে পরিবর্তিত হয়ে থাকি , তবে .bash_history
বর্তমান ডিরেক্টরিতে একটি ফাইল হিসাবে HISTFILE সেট করুন।
অন্যথায়, আমরা একটি কাস্টম ডিরেক্টরি থেকে পরিবর্তিত হয়েছি , সুতরাং স্টকটিতে HISTFILE পুনরায় সেট করুন।
অবশেষে, যেহেতু আমরা ইতিহাসের ফাইলগুলি পরিবর্তন করেছি, সেই আগের ইতিহাসটি আবার পড়ুন।
জিনিসগুলি যেতে, স্ক্রিপ্টটি PROMPT_COMMAND মান নির্ধারণ করে এবং দুটি অভ্যন্তরীণ-ব্যবহার ভেরিয়েবল (স্টক হিস্টফিল এবং "পূর্ববর্তী ডিরেক্টরি") সংরক্ষণ করে।
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD