प्रति टैब अलग-अलग कमांड के साथ xfce- टर्मिनल कैसे चलाएं और कमांड वापस आने के बाद टैब का उपयोग करते रहें?


20

अवलोकन रखने के लिए मुझे एक ही क्रम में हमेशा कई कमांड रखना पसंद है और उन्हें स्वचालित रूप से एक साथ शुरू करना है (gradle, git, database, scala-REPL, jboss ...)

-H (होल्ड) का मतलब है कि टर्मिनल समाप्ति के बाद बंद नहीं हुआ है, लेकिन मैं इस तरह की प्रक्रिया को कैसे समाप्त करूंगा? हर्गिज नहीं? ऐसे में मैं टर्मिनल का उपयोग जारी रख सकता हूं।

मैं xfce4- टर्मिनल और बैश के साथ xubuntu का उपयोग कर रहा हूं। क्या उस विंडो / टैब में काम जारी रखने की क्षमता के साथ, कई कमांडों को स्टार्टअप करने के लिए एक बेहतर GUI-समाधान है?

अद्यतन: यदि आप इन आदेशों को नहीं जानते हैं: Jboss और gradle लगातार उत्पादन कर रहे हैं, जिसे आप एक ही टर्मिनल में इंटरमिक्स करना नहीं चाहते हैं। और कभी-कभी उन्हें ^ C के साथ बाधित होने की आवश्यकता होती है, और पुनः आरंभ किया जाता है। मुझे xfce4-term को फिर से खोलना और उस निर्देशिका में नेविगेट करना पसंद नहीं है जिसमें मुझे अभिनय करने की आवश्यकता है।

डेटाबेस और स्कैला-आरईपीएल इंटरएक्टिव हैं इसलिए बैकग्राउंड में इन्हें शुरू करने का कोई मतलब नहीं है।

मेरी वर्तमान स्टार्टअप-स्क्रिप्ट केवल वांछित निर्देशिकाओं पर नेविगेट करती है, और उन्हें हमेशा उसी स्थिति में खोजने के लिए सही क्रम में सभी टैब खोलती है, इसके उद्देश्य के लिए हर टैब का नामकरण:

xfce4-terminal -T eclipse   --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \
    --tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \
    --tab -T bash       --working-directory=/home/stefan/oximity \
    --tab -T gradle     --working-directory=/home/stefan/oximity/med \
    --tab -T git        --working-directory=/home/stefan/oximity/med \
    --tab -T mysql      --working-directory=/opt/mini/mysql \
    --tab -T jboss      --working-directory=/opt/mini/jboss \
    --tab -T jboss-log  --working-directory=/opt/mini/jboss/standalone/log \
    --tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala

ग्रहण और अरण्ड को शेल से अलग किया जाता है और अपनी खिड़की में चलाया जाता है, इसलिए वहां -ई (निष्पादित) परम कार्य करता है। मुझे लगता है कि यह scala-REPL के लिए काम करता है क्योंकि यह सूची में अंतिम कमांड है।


आपका प्रश्न अभी भी मेरे लिए अस्पष्ट है। आप चाहते हैं कि टर्मिनल एक बार शेल के साथ फिर से चालू हो जाए तो इसे टर्मिनेट किया गया था? कुछ पसंद है xterm -e 'stuff;bash'?
फ्रॉस्ट्सचुट्ज़

1
इस सवाल को अभी भी काम करने की जरूरत है! मुझे यह धागा मिला, मुझे लगता है कि यह वही है जो ओपी की तलाश में है: xfce4- टर्मिनल को कैसे खुला रखें? । वह जानना चाहता है कि एक टैब का उपयोग कैसे किया जाए जहां "-एच" स्विच का उपयोग किया गया है और इसे सामान्य टर्मिनल विंडो के रूप में उपयोग करना जारी रखें। ओपी, क्या आप कृपया पुष्टि कर सकते हैं कि क्या मैं सही हूँ?
SLM

@ एसएलएम: हां, मैं आगे के आदेशों को संसाधित करने के लिए टर्मिनल को खुला रखना पसंद करता हूं - मैं अपने आदेशों में से पहला स्वचालित रूप से शुरू करना पसंद करता हूं और इसमें कई, नामित टैब हैं।
उपयोगकर्ता अज्ञात

जवाबों:


21

-H/-holdटर्मिनल एमुलेटर विंडो को खुला रखने का विकल्प है, क्योंकि इसमें शुरू किए गए एप्लिकेशन (शेल या अन्य) शुरू हो गए हैं। उस अवस्था में इससे अधिक कुछ नहीं हो सकता।

यदि आप xfce4- टर्मिनल टर्मिनल एमुलेटर में इंटरेक्टिव शेल के काम के रूप में एक कमांड शुरू करना चाहते हैं और एप्लिकेशन को बाहर निकलने के बाद इंटरलेक्टिव तरीके से शेल को चालू रखना और उपयोग करना bashचाहते हैं $PROMPT_COMMAND, तो आप xfce-terminalशुरू करने के लिए, पर्यावरण चर का उपयोग कर सकते हैं। एक इंटरेक्टिव शेल जो पहले प्रॉम्प्ट से ठीक पहले दिए गए कमांड को शुरू करता है।

xfce4-terminal \
  -T eclipse \
  --working-directory=/home/stefan/oximity \
  -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; /opt/eclipse/eclipse" bash' \
  \
  --tab -T arandr \
  --working-directory=/home/stefan/oximity \
  -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; arandr /home/stefan/.screenlayout/oximity.sh" bash' \
  \
  --tab -T bash \
  --working-directory=/home/stefan/oximity \
  ...

इस तरह, कमांड उस शेल की जॉब हैं, जिसका अर्थ है कि आप Ctrl-Zउन्हें बाद में सस्पेंड कर सकते हैं और बाद में उन्हें फिर से शुरू कर सकते हैं fg/bgजैसे कि आपने उन्हें उस इंटरेक्टिव शेल के प्रॉम्प्ट पर दर्ज किया था।

हालांकि यह माना जाता है कि आप $PROMPT_COMMANDअपने में सेट नहीं है ~/.bashrc। यह भी ध्यान दें कि कमांड का निकास स्थिति में उपलब्ध नहीं होगा $?

इसे और भी बनाने के लिए जैसे कमांड को शेल प्रॉम्प्ट में दर्ज किया गया था, आप इसे इतिहास सूची में भी जोड़ सकते हैं। पसंद:

xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND="
  unset PROMPT_COMMAND
  history -s vi\ /etc/motd
  vi /etc/motd" bash'

इस तरह, एक बार जब आप बाहर निकलते हैं vi, तो आप Upउसी viकमांड को वापस बुलाने के लिए कुंजी दबा सकते हैं ।

इसे लिखने का एक आसान तरीका:

PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \
  xfce4-terminal --disable-server \
          -T /etc/motd -e 'env CMD="vi /etc/motd" bash' \
    --tab -T       top -e 'env CMD=top bash'

:

xfce4-terminal -e 'sh -c "cmd; exec bash"'

समाधान के रूप में अन्य जवाब काम करता है लेकिन कुछ कमियां हैं:

  1. यदि आप दौड़ते Ctrl-Cसमय दबाते हैं cmd, तो बाहरी को मारता है shक्योंकि दोनों के लिए केवल एक प्रक्रिया समूह है shऔर cmd
  2. आप Ctrl-Zनिलंबित करने के लिए उपयोग नहीं कर सकतेcmd
  3. में जैसा $PROMPT_COMMANDदृष्टिकोण, आदेश के निकास स्थिति उपलब्ध में नहीं होगा $?

आप ऐसा करके लगभग 1 से ऊपर काम कर सकते हैं:

xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"'

या:

xfce4-terminal -e 'sh -ic "cmd; exec bash"'

उस बाद वाले के साथ, आप इस प्रक्रिया को भी स्थगित कर सकेंगे Ctrl-Z, लेकिन आप उस fg/bgपर उपयोग नहीं कर पाएंगे । आप पृष्ठभूमि में यह जारी रखने के लिए हालांकि एक करके सक्षम हो जाएगा kill -s CONTपर पीआईडी की cmd


वाह। यह बहुत जटिल है, लेकिन यह काम करने लगता है। :) मुझे नहीं पता कि इनाम क्यों गायब हो गया। दुर्भाग्य से मैं संकेत का परीक्षण करने से पहले समय नहीं था।
उपयोगकर्ता अज्ञात

मैं वास्तव में इनाम प्रणाली के सभी नियमों को नहीं समझता। चूँकि मुझे लगता है कि आप इनाम के लायक हैं, मैं एक नया इनाम पुनः आरंभ करता हूं।
उपयोगकर्ता अज्ञात

हाँ, इनाम 7 दिनों के बाद समाप्त हो जाते हैं, और आपके पास उन्हें पुरस्कार देने के लिए 24 घंटे बाद का समय होता है। यदि आप उन्हें नहीं जानते हैं कि वे उस उपयोगकर्ता को असाइन किए जाते हैं जिसके पास सबसे अधिक प्रतिनिधि (2 या अधिक) हैं। : यहाँ एक से अधिक आप कभी भी चाहते थे 8-) इनाम के बारे में पता करने के लिए meta.stackexchange.com/questions/16065/...
SLM

1
@ AdrianLopez, bashलिपियों में, कोई इतिहास नहीं है क्योंकि जब तक आप read -eअपनी स्क्रिप्ट में उपयोग नहीं करते हैं , तब तक कोई लाइन संपादन या उपयोगकर्ता इंटरैक्शन नहीं होता है (और आप देखेंगे कि history -s textवहां जो कार्य इतिहास द्वारा देखा गया है, उसे प्रधान करने के लिए read -e)। यहां, हम history -sएक स्क्रिप्ट से नहीं , बल्कि $PROMPT_COMMANDएक इंटरैक्टिव शेल के हुक से चल रहे हैं ।
स्टीफन चेज़लस

1
@ स्टीफनचैलेजेलस अमेजिंग। यहाँ आपके अन्य बहुमूल्य उत्तर के बाद , मुझे यह जोड़ना होगा कि xfce4-terminalकम से कम संस्करण ०.२.३ अब एक अतिरिक्त पैरामीटर चाहता है - --disable-server- पर्यावरण से गुजरने के लिए। रेफरी: lists.debian.org/debian-user/2017/10/msg00045.html
ジ ー

5

जहाँ तक मैंने आपके प्रश्न को समझा है, आप एक टर्मिनल में कुछ प्रक्रियाएँ चलाना चाहते हैं, जो उन्हें Ctrl+ करने में सक्षम Cहैं और उसके बाद, शेल के साथ विंडो को खुला रखें।

अगर मैं सही हूं, तो इसे इस तरह से कमांड के साथ पूरा किया जा सकता है:

xfce4-terminal -e "bash -c 'COMMAND; exec bash'"

क्या यह कई टैब के साथ काम करता है?
उपयोगकर्ता अज्ञात

@userunknown ज़रूर अन्य कमांड्स से पहले बस जोड़ें। उदाहरण के लिए, यदि आप "ls / etc" और "ls / dev" चलाना चाहते हैं, तो आप जारी करेंगे: xfce4-terminal -e "bash -c 'ls / etc; exec bash'" --te -e "bash - c 'ls / dev; exec bash' "यदि आप गनोम टर्मिनल का उपयोग करते हैं, तो आपको पहले कमांड के पहले --tab भी लिखना होगा।
राफेल कैवलन्ती

यह थोड़ा मददगार है, जबकि मुझे उम्मीद नहीं थी। जब मैं `xfce4-terminal --working-directory = / home / stefan / oximity / med -e" bash -c 'grad विस्फोट के साथ धमाका करना शुरू करता हूं, तो विस्फोट हो गया। कमांड नहीं मिला "कमांड में प्रवेश करते समय ठीक काम करता है। Git, mysql और scala उस तरह से ठीक काम करते हैं, लेकिन jboss के लिए, Ctrl-C पूरे jboss-tab को समाप्त करता है। मैं केवल वहां से शुरू होने वाले शेल को तैयार कर सकता था - शायद कमांड को इनपुट करने के लिए। मुझे वास्तव में समझ नहीं आ रहा है कि यहां क्या अंतर है।
उपयोगकर्ता अज्ञात

1

xfce4-terminalटैब में कई ऐप्स

प्रत्येक xfce टैब में एक इंटरैक्टिव शेल जोड़ना

आप इस हैक का उपयोग Ctrl+Cएक टैब जोड़ने के लिए कर सकते हैं अगर / जब आप एक टैब:

$ xfce4-terminal -H \
     --tab -T bash -e "bash -c 'top;bash'" \
     --tab -T git  -e "bash -c 'top;bash'"

यह आपको निम्नलिखित देगा:

   xsce w / टैब के ss

   xfce w / top Ctrl + C का ss


0

जब -Hटर्मिनल के बिना शेल से बाहर निकलना बंद हो जाएगा, भी। इस ध्वज के साथ टर्मिनल चालू रहेगा, लेकिन शेल प्रक्रिया बंद है और इसे पुनर्जीवित नहीं किया जा सकता है।

मुझे लगता है कि आप यह प्रयास करना चाहते हैं कि आप बस अपना टर्मिनल शुरू करें और आपका विकास का माहौल शुरू हो?

आप एक शेल स्क्रिप्ट बना सकते हैं और इसके अंदर अपनी सारी कमांड डाल सकते हैं। स्क्रिप्ट के अंत में आप अपना शेल शुरू करते हैं:

#!/bin/sh

gradle &
git &
... &
.... &
jboss &

$SHELL

# some cleanup commands if needed

फिर इस स्क्रिप्ट के माध्यम से कॉल करें xfce4-terminal -e /the/script। जब $SHELLमूल प्रक्रिया (आपकी स्क्रिप्ट) से बाहर निकलना समाप्त हो जाता है और पृष्ठभूमि कार्यों को बाहर निकलने का संकेत मिलेगा और छोड़ दिया जाएगा, भी।

यदि आप उन्हें जीवित रखना चाहते हैं, तो nohup jboss &अपनी स्क्रिप्ट में उदाहरण का उपयोग करें


यह काम नहीं करता है क्योंकि धीरे-धीरे और jboss स्थायी रूप से उत्पादन कर रहे हैं। आप उन्हें अपने आउटपुट को मिलाना पसंद नहीं करते। डेटाबेस- और स्काला-टर्मिनल इंटरएक्टिव हैं। उन्हें पृष्ठभूमि में रखने का कोई अर्थ नहीं है। अन्य आदेशों को अलग-अलग टैब में खोलने का विचार यह है, कि इतिहास केवल कुछ अलग-अलग कमांडों से एक विषय से भरा है और इसलिए तेजी से ब्राउज़ करने योग्य है।
उपयोगकर्ता अज्ञात
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.