개요를 유지하기 위해 저는 항상 여러 명령을 동일한 순서로 배치하고 자동으로 함께 시작하는 것을 좋아합니다(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_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
할 수 있습니다 .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"'
다른 답변에 제공된 솔루션은 작동하지만 몇 가지 단점이 있습니다.
- Ctrl-C실행 중에 키를 누르면 및
cmd
및 모두 하나의 프로세스 그룹만 있으므로 외부 프로세스가 종료됩니다sh
.sh
cmd
- Ctrl-Z일시 정지를 사용할 수 없습니다
cmd
- 이 방법과 마찬가지로
$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
계속할 수 있습니다.PID의 cmd
.
답변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'"
이를 통해 다음 정보가 제공됩니다.
답변4
쉘을 종료할 때 -H
터미널은 닫히지 않습니다. 이 플래그를 사용하면 터미널은 계속 실행되지만 셸 프로세스는 닫히고 재개될 수 없습니다.
터미널을 실행하면 바로 개발 환경이 시작되는 상황을 이루려고 하는 것 같은데요?
쉘 스크립트를 작성하고 그 안에 모든 명령을 넣을 수 있습니다. 스크립트가 끝나면 쉘을 시작합니다.
#!/bin/sh
gradle &
git &
... &
.... &
jboss &
$SHELL
# some cleanup commands if needed
그런 다음 이 스크립트를 호출합니다 xfce4-terminal -e /the/script
. 상위 프로세스(스크립트) 종료가 $SHELL
완료되면 백그라운드 작업도 종료 신호를 수신하고 종료됩니다.
그들을 살아있게 유지하려면 nohup jboss &
예를 들어 스크립트에서 사용하십시오.