यह थोड़ा सा हो सकता है, लेकिन मैं हाल ही में zsh में स्थानांतरित हो गया हूं और मुझे अपने खोल प्रॉम्प्ट को अनुकूलित करने में समस्या है। मेरी .zshrc कीzsh मेरे शेल प्रॉम्प्ट को फिर से कंप्यूटिंग नहीं कर रहा है
भाग इस तरह दिखता है:
# keeping this simple right now by just printing the date, but imagine this function would look for something specific when moving to a new directory each time
function parse_special {
print $(date)
}
autoload -U colors && colors
PS1="%{$fg[green]%}%[email protected]%m %{$fg[blue]%}%c %{$fg[yellow]%}%{$(parse_special)%} %{$reset_color%}%# "
जब मैं टर्मिनल का शुभारंभ, सब कुछ अच्छा लग रहा है;
[email protected] ~ Wed Aug 8 22:56:22 PDT 2012 %
लेकिन जब मैं एक और निर्देशिका के लिए सीडी, ऐसा लगता है मेरी parse_special समारोह नहीं बुलाया जाता है फिर से (नोटिस की तारीख में बदलाव नहीं किया जाता है) अपने कस्टम शीघ्र recompute करने:
[email protected] ~ Wed Aug 8 22:56:22 PDT 2012 % cd .ssh
[email protected] .ssh Wed Aug 8 22:56:22 PDT 2012 % cd ../workspace
[email protected] workspace Wed Aug 8 22:56:22 PDT 2012 %
मेरी शीघ्र मैं क्या उम्मीद है
क्या कोई तरीका है कि मैं इसे दिखाने के लिए हर बार प्रॉम्प्ट को पुन: सम्मिलित करने के लिए zsh बता सकता हूं?
किसी भी सुझाव के लिए बहुत बहुत धन्यवाद। cjhveal को
यह PS1 की तरह लगता है पसंद नहीं है
जबाब एकल उद्धृत मूल्यों द्वारा निर्धारित करने के लिए। मैं निम्नलिखित की कोशिश की:
local tp1="%{$fg[green]%}%[email protected]%m%{$reset_color%}"
PS1="${tp1}"
print "PS1 set by tp1: ${PS1}"
local tp2='%{$fg[green]%}%[email protected]%m%{$reset_color%}'
PS1="${tp2}"
print "PS1 set by tp2: ${PS1}"
और यह उत्पादन
#inner stuff was green
PS1 set by tp1: %{%}%[email protected]%m%{%}
#everything was uncolored
PS1 set by tp2: %{$fg[green]%}%[email protected]%m%{$reset_color%}
मैं भी जोड़ना चाहिए मिला है, cjhveal के सुझाव के आधार पर, यहाँ है कि मैं क्या सचमुच की कोशिश की है। फिर, एकल उद्धरण बातें खिलवाड़ किया जाना
function parse_special {
print $(date)
}
autoload -U colors && colors
local prompt_user='%{$fg[green]%}%[email protected]%m%{$reset_color%}'
local prompt_root='%{$fg[red]%}%[email protected]%m%{$reset_color%}'
local prompt_dir='%{$fg[blue]%}%c%{$reset_color%}'
local prompt_special='%{$fg[yellow]%}%{$(parse_special)%}%{$reset_color%}'
PS1="${prompt_user} ${prompt_dir}${prompt_special}%# "
प्रतिक्रिया के लिए धन्यवाद। मुझे लगता है कि यह सही समाधान है लेकिन मुझे अभी भी कुछ गलत करना होगा (मेरे मूल पोस्ट में किए गए संपादन को देखें)। ऐसा लगता है कि मैं यहां एकल उद्धरण का उपयोग नहीं कर सकता। क्या आप यह भी समझा सकते हैं कि आपके उत्तर में सिंगल कोट्स का उपयोग क्यों महत्वपूर्ण है? var = "$ (do_stuff)" var = '$ (do_stuff)' से भिन्न रूप से व्यवहार किया जाता है? –
सबहेल के चारों ओर लिपटे% {%} को हटाने का प्रयास करें। मुझे नहीं पता क्यों, लेकिन यह मेरे बिना मेरे लिए काम करता है। सिंगल और डबल कोट्स के बीच का अंतर यह है कि शैल इंटरपोलेशन कैसे करता है। var = "$ (do_stuff)" तुरंत शेल निष्पादित करता है और एक बार परिणाम को इंटरपोल करता है। जब आप सिंगल कोट्स का उपयोग करते हैं, तो उस सबहेल का अर्थ नहीं लिया जाता है, और जब तक यह दोहरे उद्धरण वाले स्ट्रिंग में इंटरपोलेट नहीं किया जाता है तब तक एक शाब्दिक स्थिरता के रूप में रहता है। फिर इसे निष्पादित किया जाता है। अनिवार्य रूप से, यह तब तक प्रतीक्षा करता है जब तक कि सबफेल निष्पादित करने के लिए संकेत को रीफ्रेश नहीं किया जाता है। – cjhveal
@cjhveal '% {' '%} 'पाठ को संलग्न करें जो zsh को शून्य-चौड़ाई मानने चाहिए (आमतौर पर अनुक्रम जो टर्मिनल को निम्नलिखित पाठ के साथ कुछ रंग करने के लिए बताते हैं जैसे कि रंग बदलना)। यदि आप उनमें शून्य-चौड़ाई वाले पाठ को संलग्न करते हैं तो भी आप इसे प्रदर्शित करेंगे, लेकिन कई कीड़े के साथ (उदाहरण के लिए, जब आप पूर्ण zsh करते हैं तो टर्मिनल को बताता है कि वह कर्सर को कुछ स्थिति पर चाहता है और वहां टेक्स्ट डालता है। '% { गैर-शून्य-चौड़ाई-पाठ%} 'इस स्थिति को गलत बना देगा और आपको टेक्स्ट प्राप्त होगा जो शीघ्र ओवरराइट करता है और त्वरित रंग में रंगीन होता है)। – ZyX