আপনার বিকল্পগুলি এখানে আপনার শেলের উপর নির্ভর করবে। ইন zsh
একটি সুবিধাজনক হুক ফাংশন বলা preexec()
যে অধিকার কোনো ইন্টারেক্টিভ শেল কমান্ড সামনে চালানো হয়। এই নামের সাথে একটি ফাংশন তৈরি করে, আপনি জিনিসগুলি সম্পাদন করতে পারেন। আপনি এমন একটি ফাংশনও অনুসরণ করতে পারেন precmd()
যা বলা হয় পরবর্তী প্রম্পট আঁকার ঠিক আগে চলবে যা আপনার কমান্ড শেষ হওয়ার পরে ঠিক হবে ।
এই জোড়া ফাংশন তৈরি করে, প্রম্পটে যে কোনও কমান্ড জারি করা হয়েছে তার আগে এবং পরে আপনি যে রান করতে চান তা নির্ধারণ করতে পারেন। আপনি এটি শেল ব্যবহার লগ করতে, লক তৈরি করতে, পরিবেশ পরীক্ষা করতে বা আপনার উদাহরণ হিসাবে কমান্ড চলার সময় সময় বা সংস্থান ব্যয় করতে গণনা করতে পারেন।
এই উদাহরণস্বরূপ, আমরা কমান্ড চালানোর আগে আমাদের নিজের জন্য একটি বেঞ্চমার্ক টাইমস্ট্যাম্প তৈরি করব preexec()
এবং তারপরে কমান্ডটি ব্যবহার করে ব্যয় করা সময় গণনা করব precmd()
এবং প্রম্পটের আগে এটি আউটপুট করুন বা লগ করে ফেলুন। উদাহরণ:
preexec() {
CMDSTART=$(date +%s%N)
}
precmd() {
CMDRUNTIME=$(($(date +%s%N)-$CMDSTART))
echo "Last command ran for $CMDRUNTIME nanoseconds."
}
দ্রষ্টব্য: এই নির্দিষ্ট উদাহরণের জন্য, আরও সহজ বিল্টিন ফাংশন রয়েছে। আপনাকে যা করতে হবে তা হ'ল জেডএসএইচে রানটাইম রিপোর্টিং চালু করা এবং এটি স্বয়ংক্রিয়ভাবে এটি করবে।
$ export REPORTTIME=0
$ ls -d
./
ls -BF --color=auto -d 0.00s user 0.00s system 0% cpu 0.002 total
একটি ব্যবহারিক বাস্তবায়ন সালে preexec()
, আমি এটা দেখি শেল ভিতরে চলছে ব্যবহার tmux
বা screen
ট্যাব নাম প্রদর্শিত হবে বর্তমানে চলমান কমান্ড মূল প্রজেক্টের সম্পর্কে তথ্য প্রেরণ করতে যদি তাই হয়, এবং।
দুর্ভাগ্যক্রমে ব্যাশে এই সামান্য প্রক্রিয়াটি বিদ্যমান নেই। এটির প্রতিলিপি দেওয়ার জন্য এখানে একজনের প্রচেষ্টা । অনুরূপ নিফটি সামান্য হ্যাকের জন্য গিলসের উত্তরও দেখুন ।
preexec
তবে আপনি এটিpreexec
(যেমনpreexec() { time $1; }
) এর মধ্যে চালাতে চান না , কারণ শেলটি এখনও এটির পরে তা চালায়preexec
। তাই আমরা যা করতে পারি তা হ'ল অনুরূপ।