Sekme başına farklı komutlarla xfce-terminal nasıl çalıştırılır ve komutlar döndükten sonra sekmeleri kullanmaya nasıl devam edilir?


20

Genel bakışı korumak için birden fazla komutu her zaman aynı sıraya yerleştirmeyi ve otomatik olarak birlikte başlatmayı seviyorum (sınıf, git, veritabanı, scala-REPL, jboss ...)

-H (bekletme) terminalin sonlandırmadan sonra kapalı olmadığı anlamına geliyor, ama böyle bir süreci kasten nasıl sonlandırabilirim? Bir şey değil? Böylece terminali kullanmaya devam edebilirim.

Ben xfce4-terminal ve bash ile xubuntu kullanıyorum. Bu pencerede / sekmede çalışmaya devam etme yeteneği ile birden fazla komutu başlatmak için daha iyi bir GUI çözümü var mı?

Güncelleme: Bu komutları bilmiyorsanız: Jboss ve gradle sürekli olarak aynı terminalde karıştırılmasını istemediğiniz çıktılar üretir. Ve bazen ^ C ile kesilmeleri ve yeniden başlatılmaları gerekir. Bir xfce4 terimini yeniden açmak ve hareket etmem gereken dizine gitmek istemiyorum.

Veritabanı ve scala-REPL etkileşimlidir, bu nedenle bunları arka planda başlatmanın bir anlamı yoktur.

Geçerli başlangıç ​​komut dosyam sadece istenen dizinlere gider ve her sekmeyi amacı için her zaman aynı konumda bulmak için tüm sekmeleri doğru sırada açar:

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

Tutulma ve arandr kabuktan ayrılır ve kendi pencerelerinde çalışır, böylece -e (execute) param çalışır. Sanırım listede son komut olduğundan scala-REPL için çalışır.


Sorunuz hala belirsiz. Bir uçbirim ile başlatılan komut sona erdiğinde bir kabuğun geri döndürülmesini mi istiyorsunuz? Gibi bir şey xterm -e 'stuff;bash'?
frostschutz

1
Bu sorunun hala çalışması gerekiyor! Bu konuyu buldum, OP'nin aradığı şey budur: xfce4-terminalini açık tutmak nasıl? . "-H" anahtarının kullanıldığı bir sekmeye nasıl erişileceğini bilmek ve normal bir terminal penceresi olarak kullanmaya devam etmek istiyor. OP, lütfen doğru olup olmadığımı teyit edebilir misin?
slm

@slm: Evet, diğer komutları işlemek için terminali açık tutmayı seviyorum - Komutlarımın ilkini otomatik olarak başlatmak ve birden çok adlandırılmış sekmeye sahip olmak istiyorum.
kullanıcı bilinmiyor

Yanıtlar:


21

-H/-holdOpsiyon uygulamaları da (kabuk veya başka) başlayan bir kez çıkıldı terminal emülatörü penceresi açık tutmaktır. Bu durumda, başka bir şey olamaz.

Bir komutu xfce4-terminal terminal emülatöründe etkileşimli bir kabuk işi olarak başlatmak ve uygulamadan çıktıktan sonra kabuğu çalışır durumda tutmak ve etkileşimli olarak kullanmak bashistiyorsanız, başlamak için $PROMPT_COMMANDortam değişkenini kullanabilirsiniz. xfce-terminalilk komuttan hemen önce verilen komutu başlatan etkileşimli bir kabuk.

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 \
  ...

Bu şekilde, komutlar o kabuğun işleridir , bu da onları askıya alabilir Ctrl-Zve daha sonra fg/bgbu etkileşimli kabuğun isteminde girmiş gibi devam ettirebilirsiniz .

Belirlediğiniz olmadığını gerçi varsayar $PROMPT_COMMANDGözlerinde farklı ~/.bashrc. Ayrıca, komutun çıkış durumunun içinde bulunmayacağını unutmayın $?.

Komutun kabuk istemine girildiği gibi daha da yapmak için, geçmiş listesine bile ekleyebilirsiniz. Sevmek:

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

Bu şekilde, çıktıktan sonra aynı komutu çağırmak viiçin Uptuşuna basabilirsiniz vi.

Yazmanın daha kolay bir yolu:

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"'

diğer cevaplarda verilen çözüm işe yarıyor ama bazı dezavantajları var:

  1. Eğer basarsanız Ctrl-Ciken cmdçalışıyorsa, o dış öldüren shher ikisi için tek bir işlem grubu var çünkü shve cmd.
  2. Ctrl-ZAskıya almak için kullanamazsınızcmd
  3. Olduğu gibi $PROMPT_COMMANDbir yaklaşımla, komutun çıkış durumu mevcut olmayacaktır $?.

Aşağıdakileri yaparak 1 civarında çalışabilirsiniz :

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

Veya:

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

Bu sonuncusu ile Ctrl-Z, süreci de askıya alabilirsiniz , ancak bunu kullanamazsınız fg/bg. Gerçi bir yaparak arka planda devam edebileceksiniz kill -s CONTüzerinde pid arasında cmd.


Vay. Bu oldukça karmaşık, ama işe yarıyor gibi görünüyor. :) Ödülün neden kaybolduğunu bilmiyorum. Ne yazık ki daha önce ipuçlarını test etmek için zamanım yoktu.
kullanıcı bilinmiyor

Ödül sisteminin tüm kurallarını gerçekten anlamıyorum. Ödül hak ettiğinizi düşündüğüm için, yeni bir ödül kazanıyorum.
kullanıcı bilinmiyor

Evet, ödüller 7 gün sonra sona erer ve 24 saat sonra bunları ödüllendirirsiniz. Bunların farkında değilseniz, en yüksek temsilciye (2 veya daha yüksek) sahip olan kullanıcılara atanırlar. İşte 8-8 nolu ödüller
slm

1
@AdrianLopez, bashkomut dosyalarında hiç bir geçmiş yoktur, çünkü read -esenaryonuzda kullanmadığınız sürece hiçbir satır düzenleme veya kullanıcı etkileşimi yoktur (ve bunun history -s textgörüldüğü tarihe öncelik vermek için orada çalıştığını görürsünüz read -e). Burada, history -sbir senaryodan değil, $PROMPT_COMMANDetkileşimli bir kabuğun kancasından koşuyoruz .
Stéphane Chazelas

1
@ StéphaneChazelas Şaşırtıcı. Buradaki diğer değerli cevabınızı takiben şunu eklemeliyim ki xfce4-terminal, en azından 0.6.3 sürümü artık --disable-serverortamdan geçmek için ekstra bir parametre - - istiyor . Ref: lists.debian.org/debian-user/2017/10/msg00045.html .
ジ ョ ー ジ

5

Sorunuzu anladığım kadarıyla, bazı işlemleri bir terminalde çalıştırmak, onları Ctrl+ Cyapabilmek ve bundan sonra pencereyi açık tutarak kabukla birlikte yapmak istersiniz .

Haklıysam, bu böyle bir komutla gerçekleştirilebilir:

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

Birden çok sekmeyle çalışır mı?
kullanıcı bilinmiyor

@userunknown Tabii. Diğer komutlardan önce --tab eklemeniz yeterlidir. Örneğin, "ls / etc" ve "ls / dev" komutlarını çalıştırmak isterseniz, şunu bildirirsiniz: xfce4-terminal -e "bash -c 'ls / etc; exec bash'" --tab -e "bash - c 'ls / dev; exec bash' "Gnome Terminali kullanıyorsanız, ilk komuttan önce --tab yazmanız gerekir.
Rafael Cavalcanti

Bildiğim kadarıyla değil, bu biraz yararlı. Gradle'ı xfce4-terminal ile çalıştığımda --working-directory = / home / stefan / oximity / med -e "bash -c 'gradle patladıWar explodedWarSync; bash'" `bir sekme açıldı, adlandırıldı ancak" gradle "gösteriyor: komut bulunamadı "komutunu girerken iyi çalışıyor. Git, mysql ve scala bu şekilde iyi çalışır, ancak jboss için Ctrl-C tüm jboss sekmesini sonlandırır. Kabuğu sadece oradan başlayarak hazırlayabilirdim - belki de komutu girmek için yankılanıyordu. Burada fark yaratan şeyin ne olduğunu gerçekten anlamıyorum.
kullanıcı bilinmiyor

1

xfce4-terminalsekmelerdeki birden fazla uygulama

Her xfce sekmesine etkileşimli kabuk ekleme

Ctrl+CSekme durumundaysanız / olduğunda bir kabuk eklemek için bu hack'i kullanabilirsiniz :

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

Bu size aşağıdakileri verecektir:

   sekmeleri ile xfce ss

   üst Ctrl + C ile xfce ss


0

-HTerminal olmadan kabuktan çıkıldığında da kapanacaktır. Bu bayrakla terminal çalışmaya devam eder, ancak kabuk işlemi kapatılır ve yeniden canlandırılamaz.

Sanırım terminalinize yeni başladığınızı ve geliştirme ortamınızın başladığını öğrenmeye çalışıyorsunuz?

Bir kabuk komut dosyası oluşturabilir ve tüm komutlarınızı içine koyabilirsiniz. Senaryo sonunda kabuğunuzu başlatmanız yeterlidir:

#!/bin/sh

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

$SHELL

# some cleanup commands if needed

Ardından bu komut dosyasını aracılığıyla çağırın xfce4-terminal -e /the/script. Dan çıkarken $SHELLana süreç (senaryonuz) bitmiş ve arka plan görevleri de çıkış sinyali alacak ve çıkılacak.

Onları canlı tutmak istiyorsanız, örneğin nohup jboss &betiğinizde kullanın


Gradle ve jboss kalıcı olarak çıktı ürettiği için bu işe yaramıyor. Onların çıktılarını karıştırmasını istemezsiniz. Veritabanı ve scala terminali etkileşimlidir. Onları arka plana koymanın bir anlamı yok. Diğer komutları farklı sekmelerde açma fikri, geçmişin yalnızca bir konuya birkaç farklı komutla doldurulması ve bu nedenle hızlı göz atılabilmesidir.
kullanıcı bilinmiyor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.