समय-समय पर स्रोत खोल प्रोफ़ाइल


4

मैं एक zsh उपयोगकर्ता हूं, लेकिन यह सिद्धांत में किसी भी शेल पर लागू होना चाहिए। जब मैं अपना सम्पादन करता हूँ .zshrc एक नया उपनाम जोड़ने के लिए, मुझे करना होगा source ~/.zshrc मेरे सभी खुले टर्मिनल टैब / विंडो में नए उपनाम का उपयोग करने में सक्षम होने के लिए। मुझे आश्चर्य हो रहा है कि मेरे खुले गोले समय-समय पर अपने प्रोफ़ाइल को स्वचालित रूप से रखने का कोई तरीका है।

जवाबों:


2

सबसे जटिल और सबसे वास्तविक समय समाधान उपयोगकर्ता जाल समारोह में लिखना है .zshrc जो जब फंसे सिग्नल पकड़ा जाता है, तो स्रोत .zshrc अपने आप।

ऐशे ही:

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df'

Zsh के भीतर, यह अब देखा जा सकता है:

zshsession> alias
which-command=whence
xxx=df

अब .zshrc में कुछ बदलाव हुए हैं

~$ cat .zshrc

trap includerc USR1

includerc() {
   source $HOME/.zshrc
}


alias xxx='df -g'
alias yyy='someothercommand'

यहाँ मुश्किल हिस्सा आता है। का उपयोग करते हुए inotify देख रहे .zshrc या एक चौकीदार स्क्रिप्ट द्वारा जो के अंतिम संशोधन की जांच करता है .zshrc एक कमांड चालू होता है जो USR1 सिग्नल को सभी को भेजता है zsh उपयोगकर्ता की प्रक्रियाएं। अब मैंने इसे दूसरे शेल में चलाया:

~$ ps -a | awk '$4=="zsh" {print $1}' | xargs kill -SIGUSR1

और परिणाम है:

zshsession> alias
which-command=whence
xxx='df -g'
yyy=someothercommand

बहुत दिलचस्प दृष्टिकोण। हालाँकि, मैं उपयोग करूँगा killall -s USR1 zsh इस ps-awk-xargs निर्माण की तुलना में।
mpy

मान्य सुधार। धन्यवाद!
Gombai Sándor

1

आपके द्वारा नियमित रूप से उपयोग की जाने वाली कमांड के बारे में कैसे?

आपको इसे zsh के लिए अनुकूलित करने की आवश्यकता हो सकती है:

myvi() {

    vi $1 
    source ~/.zshrc
}

alias vi=myvi

इसलिए जब आप vi कुछ भी, यह स्रोत होगा ~/.zshrc

आप उदाहरण के लिए सीडी या एलएस के साथ ऐसा कर सकते हैं।

अद्यतन करें

एक और विकल्प यह होगा कि आप अपने प्रॉम्प्ट में इसका निर्माण करें:

export PS1="\$(source ~\.zshrc)\u@\h:\w\$"

सुझाव के लिए धन्यवाद! मैंने पहले ही इसे अपनी प्रोफ़ाइल को संपादित करने के लिए उपयोग की जाने वाली कमांड में बनाया है, लेकिन यह केवल उस शेल के साथ मदद करता है जिसे मैंने इसे संपादित किया था। मेरे शीघ्र में निर्माण और अधिक आशाजनक लगता है ... क्या आपने कोशिश की है?
swrobel

@swrobel नहीं, मैंने इसे विशेष रूप से आज़माया नहीं है, लेकिन यह ठीक काम करना चाहिए - आपको पहले बचना चाहिए $ अन्यथा यह केवल पहली बार चलता है
Paul

हम्म, द export निम्नलिखित त्रुटि के परिणाम और कोई संकेत नहीं: /Users/swrobel/.zshrc:export:8: not valid in this context: ~.zshrc}u@h:w$ zsh: bad substitution
swrobel

क्षमा करें, टाइपो ठीक किया गया। @swrobel
Paul

0

आप बिल्कुल सही हैं, इस फ़ंक्शन का निर्माण किसी भी शेल में किया जा सकता है, और इसलिए सदी के एक चौथाई से अधिक।

यह नहीं है, और मेरी बात यहाँ से क्यों है। इस तरह के एक समारोह में थोड़ी सी भी त्रुटि के मामले में चल रहे सभी गोले की घातक समाप्ति हो सकती है। उदाहरण: आपके पास डिबगिंग के लिए एक कोड अनुभाग है जिसमें सम्‍मिलित है

exit 0

और अपने संपादन सत्र के दौरान .zshrc आपने इस नियम को सामान्य नियम बनाने के लिए इस निकास को संरक्षित करने वाला कोड हटा दिया। आपके सभी चल रहे हैं zsh अंत होगा। आप अपने उपयोगकर्ता को ठीक करने के लिए एक ही उपयोगकर्ता के साथ एक और शुरू करने में सक्षम नहीं होंगे .zshrc। आपको एक और खाते का उपयोग करना होगा जो कि है sudo ठीक करने में सक्षम हत्यारा .zshrc

फिर सबसे अच्छा अभ्यास हमेशा एक परीक्षण करना है .zshrc एक नव निर्मित खोल में ताकि जीवित रहने में सक्षम हो।

इस लापता फ़ंक्शन एक बहुत बुद्धिमान है।

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