दर्ज कमांड का मूल्यांकन करने के लिए preexec () का उपयोग करें - zsh

मैं कुछ संशोधित करने के लिए preexec () का उपयोग करना चाहता हूँआदेश चलाने से पहले आदेश देता है लेकिन मुझे वर्तमान दर्ज कमांड का मूल्यांकन करने में सक्षम होना चाहिए। क्या कोई चर है जिसमें इसे पूरा करने से पहले पूरा आदेश शामिल है? मुझे पता है !! आखिरी कमांड है लेकिन इतिहास से बचाए जाने से पहले मुझे मौजूदा लाइन की जरूरत है।

मैं जो करना चाहता हूं उसका एक उदाहरण शायद मदद करेगा

ls -l /root bitch

और फिर मैं Preexec देखना चाहता हूं कि मैंने अंत में कुतिया लिखा और इसे बदल दिया

sudo ls -l /root

मुझे कुछ ऐसा लगता है

preexec() {
if [[ $CURRENT_LINE =~ bitch$ ]]; then
$CURRENT_LINE="sudo ${CURRENT_LINE% bitch}"
fi

काम करेगा लेकिन मैं zsh में एक चर नहीं ढूंढ सकता जो मुझे सही $ CURRENT_LINE देता है

बोनस अंक के लिए मैं भी प्रवेश करने में सक्षम होना चाहता हूं bitch अपने आप से एक लाइन पर और इसे चलाने के लिए sudo !! लेकिन मैं शायद कुछ प्रकार के उपनाम के साथ ऐसा कर सकता था।

मुझे लगता है कि यह बनाना बेहतर हो सकता है bitch फ़ंक्शन जिसे मैं एक कमांड पाइप कर सकता हूं लेकिन मुझे नहीं लगता कि "यह भी काम करेगा क्योंकि कमांड फिर से चलने से पहले कमांड चलाएगा और असफल हो जाएगा (पाइपिंग से पहले)।

उत्तर:

उत्तर № 1 के लिए 4

जहां तक ​​मुझे पता है कि preexec यद्यपि निष्पादित करने के लिए आदेश को संशोधित करने के लिए सही स्थान के लिए नहीं है। हम बदल नहीं सकता के अंदर से निष्पादित करने के लिए आदेश preexec समारोह…

यद्यपि निष्पादित करने के लिए वास्तविक आदेश को पास किया गया है $1, $2 तथा $3

preexec

आदेश के बाद ही निष्पादित किया गया है औरनिष्पादित होने वाला है। यदि इतिहास तंत्र सक्रिय है (और लाइन को इतिहास बफर से नहीं छोड़ा गया था), उपयोगकर्ता द्वारा टाइप की गई स्ट्रिंग को पहले तर्क के रूप में पारित किया जाता है, अन्यथा यह एक खाली स्ट्रिंग है। वास्तविक आदेश जिसे निष्पादित किया जाएगा (विस्तारित उपनाम समेत) दो अलग-अलग रूपों में पारित किया जाता है: दूसरा तर्क एक एकल-पंक्ति, आकार का सीमित-सीमित संस्करण है (कार्य निकायों जैसे कार्यों के साथ); तीसरे तर्क में पूरा पाठ होता है जिसे निष्पादित किया जा रहा है।

- zshmisc(1) 9.3.1 हुक फ़ंक्शंस

उदाहरण के लिए:

alias ls="ls -sF --color=auto"
preexec () {
print ">>>preexec<<<"
print -l ${(qqq)@}
}

अगर मैं ऊपर है ~/.zshrc तो मैं निम्नानुसार प्राप्त करूंगा:

% echo test preexec<Esc-Return>
ls<Return>
;# outputs below
>>>preexec<<<
"echo test preexec
ls"
"echo test preexec; ls -sF --color=auto"
"echo test preexec
ls -sF --color=auto"
test preexec
total 1692
...

लाइन संपादक बफर में हेरफेर करने के लिए आप अपने स्वयं के ज़्ले विजेट फ़ंक्शन को zsh लाइन एडिटर में जोड़ सकते हैं। (zshzle(1))

आप मारने के व्यवहार को बदलने के लिए ज़्ले विजेट फ़ंक्शन जोड़ सकते हैं दर्ज

my-accept-line () {
if [[ "$BUFFER" == *" bitch" ]]; then
BUFFER="sudo ${BUFFER% bitch}"
fi
zle .accept-line
}
zle -N accept-line my-accept-line

उपरोक्त स्निपेट्स के लिए कार्यक्षमता बदलता है accept-line अंतर्निहित व्यवहार से my-accept-line यहां परिभाषित किया गया।


संक्षेप में जोड़ना भी नीचे वर्णित मदद कर सकता है:

क्लोनिंग विम की संक्षेप सुविधा

- "उदाहरण: zleiab [ZshWiki]" - http://zshwiki.org/home/examples/zleiab


संबंधित सवाल
सबसे लोकप्रिय