Zsh: स्वचालित रूप से निष्पादित कमांड को संशोधित करें


9

मैंने हाल ही में MacPorts के माध्यम से अपने सिस्टम में grc (जेनेरिक कलराइज़र) स्थापित किया है, जिससे मुझे बहुत सारे कमांड के लिए रंगीन आउटपुट प्राप्त करने की क्षमता मिली है जो डिफ़ॉल्ट रूप से इसका समर्थन नहीं करते हैं (नीचे स्क्रीनशॉट देखें)। Traceroute के साथ grc का उदाहरण।
मैं विशेष कमांड के लिए नहीं, बल्कि हर कमांड के लिए, grc ऑटोमैटिक का उपयोग करना चाहूंगा। मैं अपने खोल के रूप में zsh का उपयोग करता हूं।

अनिवार्य रूप से जब भी मैं निष्पादित करता command -parameter 1 2 3हूं, मैं चाहूंगा कि इसे स्वचालित रूप से निष्पादित किया जाए grc command -parameter 1 2 3
मैं उपनाम का उपयोग करने के लिए नहीं देख रहा हूँ, उदाहरण के लिए tracerouteउपनाम grc traceroute, जैसा कि मैं grc के लिए अधिक से अधिक आदेशों को जोड़ रहा हूं।

मैंने .zshrc के लिए preexec और premd कॉन्फ़िगरेशन में देखा है, लेकिन मुझे वह तरीका नहीं मिला है जिसे मैं ढूंढ रहा हूं।

जवाबों:


6

आप इसे स्वीकार-पंक्ति विजेट को फिर से परिभाषित करके कर सकते हैं:

add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc

हालाँकि, यह "i (..)", "var = x", "f () {" ... जैसी कमांड के लिए समस्या पैदा कर सकता है


अच्छी बात। मैं किसी भी समस्या के बारे में नहीं सोच सकता था जो इस समाधान को स्वयं बना सकती है, लेकिन आप इस ओर सही हैं। आपके समय के लिए शुक्रिया।
नाइट

इस पद्धति के साथ एक कमी यह है कि इतिहास grcप्रत्येक कमांड के प्रारंभ में दिखाई देगा ।
joeytwiddle

6

अन्य विकल्प। एक ही तरह की संभावित समस्याएं:

TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }

मैं हर कमांड के लिए एक "उपनाम" का उपयोग करूंगा जिसे यहां पोस्ट किए गए समाधानों के अपवादों को जानने की कोशिश करने के बजाय "grc" की आवश्यकता होगी।


3

grc.zshउस भाग का उपयोग करने पर विचार करें grcजिसका हिस्सा यहां पाया जा सकता है । इसमें सभी समर्थित कमांड के लिए उपनाम हैं।
इस Stackoverflow जवाब देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.