Як запустити xfce-terminal з різними командами на вкладку та продовжувати користуватися вкладками після повернення команд?


20

Щоб зберегти огляд, я люблю розміщувати декілька команд завжди в одному порядку і запускати їх автоматично разом (gradle, git, database, scala-REPL, jboss ...)

-H (утримання), схоже, означає, що термінал не закривається після закінчення, але як я припиняю такий процес навмисно? Зовсім не? Таким чином, що я можу продовжувати користуватися терміналом.

Я використовую xubuntu з xfce4-терміналом і bash. Чи є краще GUI-рішення для запуску декількох команд із можливістю продовжувати роботу у цьому вікні / вкладці?

Оновлення: Якщо ви не знаєте цих команд: Jboss і gradle безперервно виробляють вихід, який ви не хочете змішувати в одному терміналі. І іноді їх потрібно перервати з ^ С і перезапустити. Мені не подобається повторно відкривати xfce4-термін і переходити до каталогу, в якому я повинен діяти.

База даних та scala-REPL є інтерактивними, тому немає сенсу починати їх у фоновому режимі.

Мій поточний сценарій запуску просто переходить до потрібних каталогів і відкриває всі вкладки в потрібному порядку, щоб знайти їх завжди в одному місці, називаючи кожну вкладку за її призначенням:

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

Eclipse і арандр відриваються від оболонки і запускаються у їхньому власному вікні, тож парам -e (Execute) працює. Я думаю, що для scala-REPL він працює, оскільки це остання команда у списку.


Ваше питання досі мені незрозуміле. Ви хочете, щоб термінал повернувся до оболонки, коли команда, з якої вона була запущена, завершується? Щось на кшталт xterm -e 'stuff;bash'?
frostschutz

1
Це питання ще потребує роботи! Я знайшов цю тему, я думаю, що саме це шукає ОП: Як тримати xfce4-термінал відкритим? . Він хоче знати, як отримати доступ до вкладки, де використовується перемикач "-H", і надалі використовувати його як звичайне вікно терміналу. ОП, чи можете ви підтвердити, чи я прав?
slm

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

The:

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
@ StéphaneChazelas Дивовижно. Слідуючи вашій іншій цінній відповіді тут , я повинен додати, що xfce4-terminalяк мінімум у версії 0.6.3 тепер хочеться отримати додатковий параметр - --disable-server- пройти через оточення. Посилання: списки.debian.org/debian-user/2017/10/msg00045.html .
ジ ョ ー ジ

5

Наскільки я зрозумів ваше запитання, ви хочете запустити деякі процеси в терміналі, маючи можливість їх Ctrl+ Cта, після цього, тримати вікно відкритим, з оболонкою.

Якщо я маю рацію, це можна зробити за допомогою такої команди:

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

Це працює з декількома вкладками?
користувач невідомий

@userunknown Звичайно. Просто додайте --tab перед іншими командами. Наприклад, якщо ви хотіли запустити "ls / etc" та "ls / dev", ви видасте: xfce4-terminal -e "bash -c 'ls / etc; exec bash'" --tab -e "bash - c 'ls / dev; exec bash' "Якщо ви використовуєте Gnome Terminal, вам слід написати --tab також перед першою командою.
Рафаель Кавальканті

Це трохи корисно, але не наскільки я сподівався. Коли я запускаю gradle з `xfce4-terminal --working-directory = / home / stefan / oximity / med -e" bash -c 'gradle explodedWar explodedWarSync; bash' "` відкривається вкладка, названа, але вона показує "gradle: команда не знайдена "під час введення команди працює нормально. Git, mysql та scala відмінно працюють таким чином, але для jboss Ctrl-C припиняє всю вкладку jboss. Я міг тільки підготувати оболонку, починаючи там - можливо, повторюючи команду для введення. Я не дуже розумію, у чому тут різниці.
користувач невідомий

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

Це дасть вам наступне:

   ss xfce w / tabs

   ss xfce w / top Ctrl + C


0

При виході з оболонки без -Hтерміналу теж буде закрито. З цим прапором термінал буде продовжувати працювати, але процес оболонки закритий і неможливо відновити.

Я думаю, ти намагаєшся домогтися того, що ти тільки запускаєш термінал і твоє середовище розробки запускається?

Ви можете створити скрипт оболонки і помістити всі свої команди всередину нього. Наприкінці сценарію ви просто запускаєте свою оболонку:

#!/bin/sh

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

$SHELL

# some cleanup commands if needed

Потім зателефонуйте до цього сценарію через xfce4-terminal -e /the/script. Після завершення виходу з $SHELLбатьківського процесу (вашого сценарію) фонові завдання також отримають сигнал виходу та вихід.

Якщо ви хочете зберегти їх живими, використовуйте, наприклад, nohup jboss &у своєму сценарії


Це не працює, тому що gradle та jboss постійно виробляють вихід. Вам не подобається, щоб вони змішували свої результати. База даних та скала-термінал є інтерактивними. Немає сенсу ставити їх на другий план. Ідея відкривати інші команди на різних вкладках полягає в тому, що історія заповнюється лише кількома різними командами на одну тему і тому швидко переглядається.
користувач невідомий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.