동일한 터미널 창에 여러 탭을 만들고 그 탭에서 명령을 실행하기 위해 다음 스크립트를 작성했습니다.
#!/bin/bash
#Use the commands as:
#--tab-with-profile=Default --title=<SPECIFY THE TAB TITLE HERE> -e "bash -ic \"<SPECIFY THE COMMAND YOU WANT TO RUN HERE>; bash\"" \
#The ampersand in the end of this file makes sure that the gnome-terminal command is run as a background process
echo "Setting up simulator environment";
service mysqld start;
gnome-terminal \
--tab-with-profile=Default --title=PROG1 -e "bash -ic \"clear;ls;./prog1; bash disown\"" \
--tab-with-profile=Default --title=SIMULATOR -e "bash -ic \"clear;ls;./simulator; bash disown\"" \
--tab-with-profile=Default --title=PROG2 -e "bash -ic \"clear;ls;./prog2; bash disown\"" \
--tab-with-profile=Default --title=DATA -e "bash -ic \"./data -f \"/home/user/NetBeansProjects/data3.txt\" -p \"6785\"; bash disown\"" \
--tab-with-profile=Default --title=PROG3 -e "bash -ic \"cd /home/user/NetBeansProjects/simulator;./prog3; bash disown\"" \
&
문제는 이러한 프로그램 중 하나가 실행을 마치거나 중지를 누르면 Ctrl+c
탭이 닫힌다는 것입니다. 탭을 닫고 싶지 않습니다.탭을 열어두고 bash 터미널을 표시하여 탭에서 다른 명령을 실행할 수 있기를 원합니다.. 이를 수행할 수 있는 방법이 있습니까?
답변1
두 가지 질문이 있습니다.
첫 번째는 모든 bash -ic
명령에서(그런데 -c
덮어쓰기 로 인해 대화형 셸이 생성되지 않으므로 제거해 -i
도 -i
안전함) bash disown
대신 을 호출한다는 것입니다 bash
. 이는 아무 의미도 없으며 즉시 오류가 발생하므로 대화형 셸이 없습니다. gnome-terminal
외부 명령이 끝날 때 계속 실행되고 열린 상태로 유지됩니다 bash -c
.
(또한 명령 끝에 exec bash
대신 를 사용하여 일부 프로세스를 저장할 수도 있습니다 .)bash
두 번째는 명령이 끝날 때 대화형 셸을 생성해야 하는 상위 인스턴스를 포함하여 종료된 프로세스의 동일한 그룹에 있는 모든 프로세스에 Ctrl+ SIGINT입니다.Cbash
이 문제를 해결하려면 내장 설정을 사용하여 bash
SIGINT trap
신호가 수신될 때 bash
생성될 다른 대화형 인스턴스를 설정할 수 있습니다.bash
즉, 다음과 같이 작동합니다.
gnome-terminal \
--tab-with-profile=Default --title=PROG1 -e "bash -c \"trap 'bash' 2; clear;ls;./prog1; exec bash\"" \
--tab-with-profile=Default --title=SIMULATOR -e "bash -c \"trap 'bash' 2; clear;ls;./simulator; exec bash\"" \
--tab-with-profile=Default --title=PROG2 -e "bash -c \"trap 'bash' 2; clear;ls;./prog2; exec bash\"" \
--tab-with-profile=Default --title=DATA -e "bash -c \"trap 'bash' 2; ./data -f \"/home/user/NetBeansProjects/data3.txt\" -p \"6785\"; exec bash\"" \
--tab-with-profile=Default --title=PROG3 -e "bash -c \"trap 'bash' 2; cd /home/user/NetBeansProjects/simulator;./prog3; exec bash\"" \
&