Jak uruchomić xfce-terminal z różnymi poleceniami dla każdej karty i używać kart po powrocie poleceń?


20

Aby zachować przegląd, lubię umieszczać wiele poleceń zawsze w tej samej kolejności i uruchamiać je automatycznie razem (gradle, git, baza danych, scala-REPL, jboss ...)

-H (wstrzymanie) wydaje się oznaczać, że terminal nie jest zamykany po zakończeniu, ale jak mam świadomie zakończyć taki proces? Ani trochę? W taki sposób, że mogę nadal korzystać z terminala.

Używam Xubuntu z XFCE4-terminal i Bash. Czy istnieje lepsze rozwiązanie GUI do uruchamiania wielu poleceń z możliwością kontynuowania pracy w tym oknie / karcie?

Aktualizacja: jeśli nie znasz tych komend: Jboss i grad ciągle produkują dane wyjściowe, których nie chcesz mieszać w tym samym terminalu. A czasem trzeba je przerwać za pomocą ^ C i uruchomić ponownie. Nie lubię ponownie otwierać terminów xfce4 i przechodzić do katalogu, w którym muszę działać.

Baza danych i scala-REPL są interaktywne, więc nie ma sensu uruchamiać ich w tle.

Mój aktualny skrypt startowy po prostu nawiguje do pożądanych katalogów i otwiera wszystkie karty w odpowiedniej kolejności, aby znaleźć je zawsze w tej samej pozycji, nazywając każdą kartę dla swojego celu:

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

Zaćmienie i arandr są odłączane od powłoki i uruchamiane we własnym oknie, więc tam działa parametr -e (execute). Myślę, że dla scala-REPL to działa, ponieważ jest to ostatnie polecenie na liście.


Twoje pytanie wciąż jest dla mnie niejasne. Chcesz, aby terminal powrócił do powłoki po zakończeniu polecenia, z którym został uruchomiony? Coś takiego xterm -e 'stuff;bash'?
— frostschutz

1
To pytanie wciąż wymaga pracy! Znalazłem ten wątek, myślę, że tego właśnie szuka OP: jak utrzymać xfce4-terminal otwarty? . Chce wiedzieć, jak uzyskać dostęp do karty, na której użyto przełącznika „-H”, i nadal używać go jako zwykłego okna terminala. OP, czy możesz potwierdzić, czy mam rację?
— slm

@slm: Tak, lubię pozostawić terminal otwarty, aby przetwarzał dalsze polecenia - po prostu lubię automatycznie uruchamiać pierwsze z moich poleceń i mieć wiele nazwanych zakładek.
— użytkownik nieznany

Odpowiedzi:


21

-H/-holdOpcją jest, aby utrzymać otwarte okno emulator terminala raz aplikacje rozpoczęły się w nim (skorupy lub inny) został zakończony. W tym stanie nic więcej nie może się wydarzyć.

Jeśli chcesz uruchomić polecenie jako zadanie powłoki interaktywnej w emulatorze terminali xfce4 i utrzymać działanie powłoki i używać jej interaktywnie po wyjściu z aplikacji bash, możesz użyć $PROMPT_COMMANDzmiennej środowiskowej, aby xfce-terminalrozpocząć interaktywna powłoka, która uruchamia dane polecenie tuż przed pierwszym monitem.

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

W ten sposób polecenia są zadaniami tej powłoki, co oznacza, że ​​możesz je zawiesić Ctrl-Zi wznowić później, fg/bgtak jakbyś wprowadził je po zachęcie tej interaktywnej powłoki.

Zakłada się jednak, że nie ustawiłeś $PROMPT_COMMANDw swoim ~/.bashrc. Należy również pamiętać, że status wyjścia polecenia nie będzie dostępny w $?.

Aby uczynić to jeszcze bardziej podobnym do polecenia wprowadzonego w wierszu powłoki, możesz nawet dodać je do listy historii. Lubić:

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

W ten sposób po wyjściu vimożesz nacisnąć Upklawisz, aby przywołać to samo vipolecenie.

Łatwiejszy sposób na napisanie:

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

rozwiązanie podane w innych odpowiedziach działa, ale ma pewne wady:

  1. Jeśli naciśniesz Ctrl-Cpodczas cmddziałania, to zabije to urządzenie zewnętrzne, shponieważ istnieje tylko jedna grupa procesów dla obu shi cmd.
  2. Nie możesz użyć Ctrl-Zdo zawieszeniacmd
  3. Podobnie jak w $PROMPT_COMMANDpodejściu, status wyjścia polecenia nie będzie dostępny w $?.

Możesz obejść 1 powyżej, wykonując:

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

Lub:

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

W tym drugim przypadku możesz także zawiesić proces Ctrl-Z, ale nie będziesz mógł z niego korzystać fg/bg. Będziesz mógł ją kontynuować w tle choć wykonując kill -s CONTna PID z cmd.


Łał. To dość skomplikowane, ale wydaje się, że działa. :) Nie wiem, dlaczego nagroda zniknęła. Niestety nie miałem czasu na sprawdzenie podpowiedzi.
— użytkownik nieznany

Naprawdę nie rozumiem wszystkich zasad systemu nagród. Ponieważ uważam, że zasługujesz na nagrodę, zaczynam nową nagrodę.
— użytkownik nieznany

Tak, nagrody wygasają po 7 dniach, a ty masz 24 godziny na ich przyznanie. Jeśli ich nie znasz, zostaną przypisani do dowolnego użytkownika, który ma najwyższe powtórzenie (2 lub więcej). Oto więcej niż kiedykolwiek chciałeś wiedzieć o nagrodach
— slm

1
@AdrianLopez, w bashskryptach, w ogóle nie ma historii, ponieważ nie ma edycji linii ani interakcji użytkownika, chyba że użyjesz jej read -ew skrypcie (i zobaczysz, że history -s textdziała tam, aby zaliczyć wyświetlaną przez nią historię read -e). Tutaj nie uruchamiamy się history -sze skryptu, ale z $PROMPT_COMMANDhaka interaktywnej powłoki.
— Stéphane Chazelas,

1
@ StéphaneChazelas Amazing. Po twojej innej cennej odpowiedzi tutaj , muszę dodać, że xfce4-terminalprzynajmniej wersja 0.6.3 chce teraz dodatkowego parametru - --disable-server- aby przejść przez środowisko. Patrz: list.debian.org/debian-user/2017/10/msg00045.html .
— ジ ョ ー ジ

5

O ile rozumiem twoje pytanie, chcesz uruchomić niektóre procesy w terminalu, będąc w stanie CtrlC je + , a następnie pozostawić otwarte okno z powłoką.

Jeśli mam rację, można to zrobić za pomocą następującego polecenia:

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

Czy to działa z wieloma kartami?
— użytkownik nieznany

@userunknown Pewnie. Po prostu dodaj --tab przed innymi poleceniami. Na przykład, jeśli chcesz uruchomić „ls / etc” i „ls / dev”, wydaj: xfce4-terminal -e „bash -c 'ls / etc; exec bash” „--tab -e” bash - c 'ls / dev; exec bash' "Jeśli używasz Gnome Terminal, musisz napisać --tab również przed pierwszym poleceniem.
— Rafael Cavalcanti

Jest to trochę pomocne, choć nie tak daleko, jak się spodziewałem. Kiedy zaczynam gradle z `xfce4-terminal --working-directory = / home / stefan / oximity / med -e" bash -c 'gradle explodedWar explodedWarSync; bash' "` `zakładka jest otwarta, o nazwie, ale pokazuje" gradle: polecenie nieznalezione ”podczas wpisywania polecenia działa poprawnie. Git, mysql i scala działają w ten sposób dobrze, ale dla jbossa Ctrl-C kończy całą kartę jboss. Mogłem tylko przygotować powłokę, zaczynając od tego miejsca - być może powtarzając polecenie do wprowadzenia. Naprawdę nie rozumiem, co tu robi różnice.
— użytkownik nieznany

1

wiele aplikacji na xfce4-terminalkartach

Dodanie interaktywnej powłoki do każdej karty xfce

Możesz użyć tego hacka, aby dodać powłokę, jeśli / kiedy masz Ctrl+Ckartę:

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

To da ci następujące:

   ss xfce w / tabs

   ss z xfce w / top Ctrl + C


0

Po wyjściu z powłoki bez -Hterminala również zostanie zamknięty. Z tą flagą terminal będzie działał, ale proces powłoki jest zamknięty i nie można go przywrócić.

Myślę, że próbujesz zarchiwizować, że właśnie uruchamiasz terminal i uruchamia się środowisko programistyczne?

Możesz utworzyć skrypt powłoki i umieścić w nim wszystkie swoje polecenia. Na końcu skryptu wystarczy uruchomić powłokę:

#!/bin/sh

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

$SHELL

# some cleanup commands if needed

Następnie wywołaj ten skrypt za pośrednictwem xfce4-terminal -e /the/script. Po wyjściu z$SHELL zakończeniu procesu nadrzędnego (skryptu) zadania w tle otrzymają również sygnał wyjścia i wyjdź.

Jeśli chcesz utrzymać je przy życiu, użyj np. nohup jboss &W skrypcie


To nie działa, ponieważ gradle i jboss stale wytwarzają dane wyjściowe. Nie lubisz, gdy miksują swoje wyniki. Baza danych i terminal Scala są interaktywne. Nie ma sensu umieszczać ich w tle. Pomysł otwierania innych poleceń na różnych kartach polega na tym, że historia jest wypełniona tylko kilkoma różnymi poleceniami do jednego tematu, a zatem można je szybko przeglądać.
— użytkownik nieznany
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.