मैं कार्य को निलंबित करने के इस पैटर्न का पालन करता हूं और फिर इसे Ctrl-Z bgअनुक्रम के साथ अक्सर जारी रखने देता हूं ।
मैं सोच रहा था कि वहाँ किसी भी कुंजी को संपीड़ित करने का कोई तरीका है?
मेरा खोल है zsh
मैं कार्य को निलंबित करने के इस पैटर्न का पालन करता हूं और फिर इसे Ctrl-Z bgअनुक्रम के साथ अक्सर जारी रखने देता हूं ।
मैं सोच रहा था कि वहाँ किसी भी कुंजी को संपीड़ित करने का कोई तरीका है?
मेरा खोल है zsh
जवाबों:
Ctrl+ Zअनुक्रम, टर्मिनल द्वारा नियंत्रित किया जाता खोल से नहीं। (उपयोगी पृष्ठभूमि:, टर्मिनल ’,, शेल’, and ट्टी ’और is कंसोल’ के बीच सटीक अंतर क्या है? )
केवल एक छोटा, गैर-एक्स्टेंसिबल सेट फ़ंक्शंस टर्मिनल में एक कुंजी के लिए बाध्य हो सकता है । आप इन फ़ंक्शन से जुड़ी कुंजियों को कस्टमाइज़ कर सकते हैं , लेकिन दूसरे फ़ंक्शन को नहीं जोड़ सकते। ये कार्य तीन श्रेणियों में आते हैं:
eof
, Ctrl+ D), पंक्ति के अंत ( eol
, Ctrl+ M), मिटाया वर्ण छोड़ दिया ( erase
, Ctrl+ H), मिटा शब्द वाम ( werase
, Ctrl+ W), मिटा रेखा ( kill
, Ctrl+ U)।stop
( Ctrl+ S), start
( Ctrl+ Q)। केवल पुराने धारावाहिक टर्मिनलों पर उपयोगी होते हैं जो टर्मिनल को गिरा देते हैं जब टर्मिनल कंप्यूटर या इसके विपरीत नहीं रख सकता था।intr
, Ctrl+ C), बल छोड़ना ( quit
, Ctrl+ \), सस्पेंड ( Ctrl+ Z)।लिनक्स सहित कुछ प्रणालियाँ उस सूची का विस्तार करती हैं, लेकिन मैंने कभी ऐसा नहीं देखा जिसमें पृष्ठभूमि शामिल हो। ध्यान दें कि यह कर्नेल में टर्मिनल ड्राइवर और टर्मिनल एमुलेटर में दोनों का समर्थन करेगा। तो आपको सस्पेंड करना होगा, जो अग्रभूमि नौकरी को SIGTSTP सिग्नल भेजता है । यह अग्रगामी नौकरी के नेता की मूल प्रक्रिया में एक SIGCHLD को ट्रिगर करता है , जो आमतौर पर शेल है। जब शेल को SIGCHLD प्राप्त हुआ, तो यह waitpid
पता लगाने के लिए कॉल किया गया कि इसे क्यों अधिसूचित किया गया था, और यह पता लगाने पर कि पृष्ठभूमि की नौकरी निलंबित कर दी गई थी, यह एक अधिसूचना (जैसे [1] + 12345 suspended mycommand
) और एक नया संकेत प्रदर्शित करता है ।
आप SIGCONT
अग्रभूमि नौकरी के लिए एक संकेत भेजने के लिए शेल को प्रोग्राम कर सकते हैं । मुझे नहीं लगता कि zsh के पास इसके लिए एक हुक है, आपको स्रोत कोड को पैच करना होगा। और zsh के लिए यह जानने का कोई तरीका नहीं है कि क्या आप वास्तव में प्रोग्राम को बाधित करना चाहते हैं (उफ़, यह प्रोग्राम गलत काम कर सकता है, मुझे इसे सॉल्व करते समय सस्पेंड कर देना चाहिए) या बैकग्राउंड करने के लिए।
वर्तमान नौकरी ( ) की पृष्ठभूमि के लिए मैं जोश में Ctrl+ Zकुंजी अनुक्रम सेट करना चाहता हूं %%
। इस तरह, मैं Ctrl+ Z Ctrl+ दबाकर अग्रभूमि नौकरी को पृष्ठभूमि पर भेज सकता हूं Z। मैं इसे पर हूँ, वहीं मैं Ctrl+ Zकिसी और उपयोगी कुछ करना जब वर्तमान इनपुट लाइन खाली (तो मैं बस एक उपप्रक्रिया से वापस नहीं आया है) नहीं है: "निलंबित" वर्तमान इनपुट लाइन, मुझे एक और आदेश लिखें करने की इजाजत दी , जिसके बाद बाधित लाइन को इनपुट बफर में वापस धकेल दिया जाता है।
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
^ z ^ z जैसे zsh ऊपर संभव है बैश में, हालांकि यह थोड़ा टेढ़ा है और मैंने इसे लंबे समय तक नहीं चलाया है:
"\C-z": "bg\n"
इसलिए ^ सस्पेंड के लिए z चालू है जब एक कमांड चलाया जाता है, तो बैश प्रॉम्प्ट के लिए बंद हो जाता है।
तो समाधान मिल गया है, न कि मैं जो चाहता हूँ, लेकिन यहाँ से पास होना चाहिए https://superuser.com/a/161922/35223
खाली कमांड लाइन पर bg चलता है (ताकि Ctrl + Z Ctrl + Z एक प्रोग्राम को स्थगित कर दे और तुरंत पृष्ठभूमि में फिर से शुरू हो जाए)।
Ctrl+Z
कॉल bg
, मैं एक गैर खाली इनपुट लाइन का पता लगाने के बारे में निश्चित नहीं हूँ)।
क्या ये कमांड्स हैं जो आप शुरू में अग्रभूमि में चलाना चाहते थे, और फिर पृष्ठभूमि पर स्विच करें? मुझे नहीं पता कि ऐसा करने का कोई सरल तरीका है या नहीं। लेकिन अगर आप ऐसी कमांड्स चलाना चाहते हैं जो पृष्ठभूमि के साथ शुरू होंगी, तो आप बस लाइन के अंत में एक एम्परसेंड जोड़ सकते हैं। जैसे, ping google.com &
पृष्ठभूमि में पिंग करना शुरू कर देंगे; जब तक आप टाइप नहीं करेंगे तब तक आप इसके साथ बातचीत नहीं कर पाएंगे fg
।