यहां आपके विकल्प आपके शेल पर निर्भर करने वाले हैं। इसमें zsh
एक सुविधाजनक हुक फ़ंक्शन कहा जाता है preexec()
जो किसी भी इंटरैक्टिव शेल कमांड से ठीक पहले चलाया जाता है। इस नाम के साथ एक फ़ंक्शन बनाकर, आप चीजों को निष्पादित कर सकते हैं। आप एक फ़ंक्शन के साथ भी अनुसरण कर सकते हैं precmd()
, जिसे अगले प्रॉम्प्ट के तैयार होने से ठीक पहले चलाया जाएगा, जो आपके कमांड के पूरा होने के बाद सही होगा ।
इस फ़ंक्शन को बनाकर, आप जो भी आदेश चाहते हैं, उसके पहले और बाद में प्रॉम्प्ट पर जो भी आदेश जारी किए जा सकते हैं, आप कर सकते हैं। आप इसका उपयोग शेल उपयोग को लॉग करने, ताले बनाने, पर्यावरण का परीक्षण करने के लिए कर सकते हैं, या जैसा कि आपके उदाहरण में कमांड रन करते समय खर्च किए गए समय या संसाधनों की गणना करते हैं।
इस उदाहरण में, हम कमांड का उपयोग करने से पहले खुद को एक बेंचमार्क टाइमस्टैम्प बनाएंगे, preexec()
फिर precmd()
प्रॉम्प्ट का उपयोग करके कमांड को निष्पादित करने के समय की गणना करें और प्रॉम्प्ट से पहले इसे आउटपुट करें या इसे लॉग इन करें। उदाहरण:
preexec() {
CMDSTART=$(date +%s%N)
}
precmd() {
CMDRUNTIME=$(($(date +%s%N)-$CMDSTART))
echo "Last command ran for $CMDRUNTIME nanoseconds."
}
नोट: इस विशेष उदाहरण के लिए, एक और भी आसान बिल्टइन फ़ंक्शन है। आपको बस इतना करना है कि ZSH में रनटाइम रिपोर्टिंग चालू करें और यह स्वचालित रूप से ऐसा करेगा।
$ 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
रिटर्न के बाद भी इसे चलाता है । तो सबसे अच्छा हम कुछ ऐसा ही कर सकते हैं।