각 탭에서 다른 명령으로 xfce-terminal을 실행하고 명령이 반환된 후 탭을 계속 사용할 수 있습니까?

각 탭에서 다른 명령으로 xfce-terminal을 실행하고 명령이 반환된 후 탭을 계속 사용할 수 있습니까?

개요를 유지하기 위해 저는 항상 여러 명령을 동일한 순서로 배치하고 자동으로 함께 시작하는 것을 좋아합니다(gradle, git, 데이터베이스, scala-REPL, jboss...).

-H(hold)는 종료 후에도 터미널이 닫히지 않는다는 뜻인 것 같은데, 이런 프로세스를 의도적으로 종료하려면 어떻게 해야 할까요? 별말씀을요? 이렇게 하면 터미널을 계속 사용할 수 있습니다.

저는 xfce4-terminal 및 bash와 함께 xubuntu를 사용하고 있습니다. 여러 명령을 실행하고 해당 창/탭에서 계속 작업할 수 있는 더 나은 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(실행) 매개변수가 작동합니다. scala-REPL의 경우 목록의 마지막 명령이기 때문에 유효하다고 생각합니다.

답변1

-H/-hold옵션은 터미널 에뮬레이터 창에서 시작된 애플리케이션(셸 또는 기타)이 종료된 후에도 터미널 에뮬레이터 창을 열어 둡니다. 그 상태에서는 더 이상 아무 일도 일어날 수 없습니다.

xfce4-terminal 터미널 에뮬레이터에서 대화형 셸 작업으로 명령을 시작하고 셸 실행을 유지하고 응용 프로그램이 종료된 후 대화형으로 사용하려는 경우 환경 변수를 사용하여 대화형 셸을 시작할 bash수 있습니다 . 첫 번째 프롬프트 전에 명령이 주어졌습니다.$PROMPT_COMMANDxfce-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할 수 있습니다 .Upvi

더 간단하게 작성하는 방법:

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.shcmd
  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계속할 수 있습니다.PIDcmd.

답변2

귀하의 질문을 이해하면 터미널에서 일부 프로세스를 실행하고 Ctrl+ 할 수 있는 C다음 셸을 사용하여 창을 열어두기를 원합니다.

내 말이 맞다면 다음과 같은 명령으로 이 작업을 수행할 수 있습니다.

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

답변3

xfce4-terminal탭의 여러 앱

각 xfce 탭에 대화형 셸 추가

Ctrl+C탭을 사용하는 경우 다음 트릭을 사용하여 셸을 추가할 수 있습니다.

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

이를 통해 다음 정보가 제공됩니다.

   탭이 있는 xfce의 ss

   상단 Ctrl+C를 사용하는 xfce의 ss

답변4

쉘을 종료할 때 -H터미널은 닫히지 않습니다. 이 플래그를 사용하면 터미널은 계속 실행되지만 셸 프로세스는 닫히고 재개될 수 없습니다.

터미널을 실행하면 바로 개발 환경이 시작되는 상황을 이루려고 하는 것 같은데요?

쉘 스크립트를 작성하고 그 안에 모든 명령을 넣을 수 있습니다. 스크립트가 끝나면 쉘을 시작합니다.

#!/bin/sh

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

$SHELL

# some cleanup commands if needed

그런 다음 이 스크립트를 호출합니다 xfce4-terminal -e /the/script. 상위 프로세스(스크립트) 종료가 $SHELL완료되면 백그라운드 작업도 종료 신호를 수신하고 종료됩니다.

그들을 살아있게 유지하려면 nohup jboss &예를 들어 스크립트에서 사용하십시오.

관련 정보