bash: कमांडलाइन में दिए गए कमांड को निष्पादित करें और बाहर न निकलें


13

मैं बैश के कमंडल पर एक कमांड को कैसे निर्दिष्ट करूं जिसे पढ़ने के बाद नए बैश के अंदर एक बार निष्पादित किया जाएगा ~ / .Bashrc - लेकिन कमांड खत्म होने के बाद बैश को बाहर निकलने के बिना यह सब?

मैं टर्मिनेटर के लिए एक "बूट-अप-कॉन्फ़िगरेशन" के साथ इधर-उधर हो रहा हूं, जहां कुछ स्प्लिट्स को स्टार्टअप के बाद कुछ एप्लिकेशन (vim, mutt, irrsi) शुरू करना चाहिए। लेकिन मैं अभी भी पृष्ठभूमि में सामान्य गोले चाहता हूं (सीटीएल-जेड और इतने पर ...) इसलिए एक आवेदन छोड़ने के बाद मेरे पास वही शेल है जो मैंने जीवनकाल के दौरान प्राप्त किया था ...

मेरे लिए क्या काम नहीं करता (दिए गए उत्तरों के आधार पर)

 ( bash; vim )              # vim waits for the exit of bash...
 bash -c vim                # bash exits after vims exit...
 bash -c 'vim; exec bash'   # bash is executed _after_ vim... ctrl-z won't work
 echo vim | bash -s         # "Vim: Warning: Input is not from a terminal"     

अस्थायी bashrc में मैन्युअल रूप से "vim" जोड़ना भी काम नहीं करता है। vim सही तरीके से शुरू होता है, लेकिन अभी भी कोई पृष्ठभूमि बैश मौजूद नहीं है जहां एक ctrl-z मुझे लाएगा।

कोई सुझाव?

जवाबों:


4

मुझे लगता है कि इसे हल करने का एक तरीका मिल गया है ताकि नौकरी नियंत्रण काम करे:

bash --rcfile <(cat $ {HOME} /। bashrc; गूंज का निर्यात PROMPT_COMMAND = "vim; निर्यात PROMPT_COMMAND =" ') -i

यह मक्खी पर कस्टम bashrc फ़ाइल बनाता है और Vim प्रारंभ में देरी करने के लिए PROMPT_COMMAND चर का उपयोग करता है ताकि नौकरी नियंत्रण काम करे। यह निश्चित रूप से विम विशिष्ट नहीं होने के लिए सामान्यीकृत किया जा सकता है।

ठीक है, बस इसे टर्मिनेटर के साथ परीक्षण किया गया है और कम से कम कॉन्फ़िगरेशन फ़ाइल के साथ काम करना लगता है:

[profiles]
[[default]]
    use_custom_command = True
    custom_command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="vim; export PROMPT_COMMAND="') -i"

बहुत बहुत धन्यवाद। मैं unset PROMPT_COMMANDबजाय के बजाय पसंद करते हैं export PROMPT_COMMAND=
पेक

2
bash -c 'vim; exec bash'

exec bashएक नया एक के साथ मौजूदा बैश उदाहरण की जगह लेगा।


1
हम् ... हाँ ... यह "बाहर निकलने के बाद खाली विभाजन" समस्या को हल करता है ... लेकिन ctrl-z अभी भी काम नहीं करता है - बस बाहर निकलने के बाद फिर से मार डाला जाता है ... मुझे bash के अंदर विम की जरूरत है
marvin2k

1
मैं इस फॉर्म का उपयोग कर रहा हूं और सिर्फ इस बात पर ध्यान दिया है कि यह सिर्फ उपयोग करते समय एलियास आदि को विरासत में नहीं देता है exec bashexec bash --loginमदद करता है, लेकिन जैसा कि यह बताया गया है कि यह वास्तव में काफी वैसा नहीं है जैसा हम चाहते हैं।
वेलेन्डी

वास्तविक समाधान। बदसूरत नहीं। +1
एंड्रयू

2

(एब) का उपयोग .bashrcकरना ही एकमात्र उपयोगी तरीका है। 1 पीढ़ी अनावश्यक है, हालांकि - बस एक वातावरण चर में कमांड (एस) डाल दिया है और evalयह:

  • निम्नलिखित को अपने अंत में रखें ~/.bashrc:

    [[ $startup_cmd ]] && {
        declare +x startup_cmd
        eval "$startup_cmd"
    }
  • इस कमांड को शुरू करने के लिए टर्मिनेटर कॉन्फ़िगर करें:

    env startup_cmd='vim' bash

1 चलो "अखरोट को दरार करने के लिए सी 4 का उपयोग करें" को बाहर करें।


अच्छा लग रहा है और पहली नज़र में काम करता है ... bashrc को संशोधित करना है, क्या उसके साथ जीवन हो सकता है ... लेकिन जो भी कारण से, ctrl-z अभी भी काम नहीं करता है - कोई विचार? - किस प्रकार की अलमारी में मुझे c4- आधारित समाधान मिलेगा?
मार्विन 2k

0

मुझे ttux-z में ctrl-z आउट करने की क्षमता के साथ vim को स्पॉन करने की इच्छा के संदर्भ में भी यही समस्या थी। अंत में, मैं यह पता लगाने में विफल रहा कि इसे साफ तरीके से बाश के अंदर कैसे किया जाए। मैं निम्नलिखित पर बस गया:

tmux new-session -d -s foo
tmux send-keys -t foo:0.0 "vim
"

0
bash --rcfile <(cat ${HOME}/.bashrc; echo 'trap vim 12'; echo 'echo $$>/tmp/foo'; echo '( sleep 1;kill -12 `</tmp/foo`; )' ) -i

" मक्खी पर कस्टम bashrc फ़ाइल " के लिए उपयोगकर्ता की चिंता के लिए धन्यवाद !

दूसरा महत्वपूर्ण हिस्सा है " ट्रैप ", एक बाश-बिलिन:

  • जाल सिर्फ परिभाषित करता है उपरोक्त आदेश अगर बैश संकेत 12 प्राप्त करता है निष्पादित करने के लिए विम।
  • आरसीएफाइल निष्पादन के दौरान पृष्ठभूमि में रखो, एक लटकी मार -12 कमांड एक सेकंड का इंतजार करती है ताकि बैश शुरुआती को खत्म कर सके। यदि आप इसे छोड़ देते हैं, तो vim के दौरान एक Ctrl-Z आपको एक कार्यशील शेल में नहीं डालेगा ।
  • फिर हत्या को अंजाम दिया जाता है और इस तरह विम को शुरू किया जाता है।
  • किल प्रक्रिया / आईडी से tmp / foo पढ़ता है। शायद एक और अधिक सुंदर तरीका है।
  • मैंने Ctrl-Z का भी परीक्षण किया और यह उम्मीद के मुताबिक काम करता है।

मुझे नहीं पता कि आप जिस "टर्मिनेटर" का उल्लेख करते हैं, वैसे क्या है।

मैंने इसे बैश और स्क्रीन के साथ समाधान खोजते हुए पाया।

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