Как запустить xfce-терминал с разными командами на вкладку и продолжать использовать вкладки после возвращения команд?

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

-H (hold), по-видимому, означает, что терминал не закрыт после завершения, но как я могу закончить такой процесс? Не за что? Таким образом, я могу продолжать использовать терминал.

Я использую xubuntu с xfce4-terminal и bash. Есть ли лучшее GUI-решение для запуска нескольких команд, с возможностью продолжить работу в этом окне /вкладке?

Обновление: Если вы не знаете эти команды: Jboss и gradle непрерывно производят вывод, который вы не хотите смешивать в одном терминале. И иногда их нужно прервать с помощью ^ C и перезапустить. Мне не нравится повторно открывать xfce4-term и перейти к каталогу, в котором мне нужно действовать.

База данных и 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 и arandr отсоединяются от оболочки и запускаются в их собственном окне, поэтому работает параметр -e (execute). Я думаю, что scala-REPL работает, так как это последняя команда в списке.

19 голосов | спросил user unknown 15 Maypm13 2013, 14:13:27

4 ответа


18

Параметр -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 \
  ...

Таким образом, команды jobs этой оболочки, что означает, что вы можете приостановить их с помощью 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 , чтобы вызвать тот же самый ---- +: = 11 =: + ----.

Более простой способ написать:

vi

:

PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \
  xfce4-terminal \
          -T /etc/motd -e 'env CMD="vi /etc/motd" bash' \
    --tab -T       top -e 'env CMD=top bash'
Решение

, как указано в других ответах, работает, но имеет некоторые недостатки:

  1. Если вы нажмете Ctrl-C , когда выполняется xfce4-terminal -e 'sh -c "cmd; exec bash"' , который убивает внешний cmd, поскольку есть только одна группа процессов для sh и ---- +: = 17 =:. + ---- литий>
  2. Вы не можете использовать Ctrl-Z для приостановки ---- +: = 18 =: + ----
  3. Как и в подходе sh, статус выхода команды не будет доступен в cmd литий>

Вы можете обойти 1 выше:

cmd

Или:

$PROMPT_COMMAND

С этим последним вы также сможете приостановить процесс с помощью Ctrl-Z , но вы не сможете использовать $?. Вы сможете продолжить его в фоновом режиме, если сделать xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"' на pid xfce4-terminal -e 'sh -ic "cmd; exec bash"'

ответил Stéphane Chazelas 29 Maypm13 2013, 23:53:59
5

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

Если я прав, это может быть выполнено с помощью следующей команды:

xfce4-terminal -e "bash -c 'COMMAND; exec bash'"
ответил Rafael Cavalcanti 26 Maypm13 2013, 12:20:48
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 of xfce w /tabs

ss из xfce w /top Ctrl + C

ответил slm 24 Maypm13 2013, 12:51:08
0

При выходе из оболочки без -H терминал также будет закрыт. С этим флагом терминал будет продолжать работать, но процесс оболочки закрыт и не может быть восстановлен.

Я думаю, вы пытаетесь архивировать, что вы только начинаете свой терминал и запускаете среду разработки?

Вы можете создать сценарий оболочки и поместить в него все свои команды. В конце скрипта вы просто запускаете свою оболочку:

#!/bin/sh

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

$SHELL

# some cleanup commands if needed

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

Если вы хотите сохранить их в живых, используйте, например, nohup jboss & в вашем скрипте

ответил krissi 24 Maypm13 2013, 12:55:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132