터미널 창을 열고 명령을 실행하는 스크립트를 어떻게 만들 수 있습니까?


140

우분투 머신을 시작할 때 실행해야 할 스크립트가 세 개 있는데, 개발 환경에서 사용하는 서비스를 시작합니다.

이를 위해 수동으로 세 개의 터미널을 열고 명령을 입력하십시오.

세 개의 터미널을 열고 각 터미널에서 하나의 명령을 실행하는 스크립트를 작성하는 방법이 있습니까? (각 명령은 별도의 터미널 창에 있어야 출력을 볼 수 있습니다).

답변:


138
gnome-terminal -e command

또는

xterm -e command

또는

konsole -e command

거의

terminal -e command

명령이 종료 될 때 터미널을 유지하려면 :

곤솔에는 --noclose깃발이 있습니다.

xterm에는 -hold플래그가 있습니다.

에서 gnome-terminal,로 이동 편집 -> 프로필 환경 설정 -> 제목 . 명령 탭을 클릭 하십시오. 명령이 종료 될 때 레이블이 지정된 드롭 다운 메뉴에서 터미널 유지 를 선택하십시오 . 이를 위해 새로운 프로파일을 생성하고

gnome-terminal --window-with-profile = NAMEOFTHEPROFILE -e 명령

1
터미널을 잡으려고하면 "자식 프로세스가 상태 코드 127로 정상적으로 종료됩니다"
— Darshan Chaudhary

2
gnome-terminal에는 더 이상 제목 옵션이 없습니다 :(
— törzsmókus

1
@ törzsmókus 실제로 2017입니다! LTS 릴리스의 지원 수명은 5 년입니다. 14.04는 2019 년 4 월까지 끝나지
— bhass1

1
gnome-terminal -e commandcommand인용 된 경우에만 작동합니다 . 따라서 이것은 작동하지 gnome-terminal -e "echo hello world; sleep 3"않지만 다음과 같이 작동 gnome-terminal -e "bash -c 'echo hello world; sleep 3'"합니다. 한숨.
— bgoodr

3
; $SHELL명령 끝에 추가하여 그놈 터미널을 열어 둘 수도 있습니다 . 예 :gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
— Gabriel Staples

58

대신 하드 코딩의 gnome-terminal, konsole등등, 대안 시스템을 사용합니다. 기본 터미널 에뮬레이터를 실행하는 프로그램은 다음과 같습니다.

x-terminal-emulator

내 시스템 에서이 명령을 실행할 때마다 새로운 Konsole 인스턴스가 열립니다.

운 좋게도 터미널은 -e명령 실행 옵션 을 지원하는 것 같습니다 ( konsole및 확인했습니다 gnome-terminal). 명령 이후의 인수는 호출 된 명령으로 전달됩니다. Bash는 터미널에서 열린 상태를 유지하지 않기 위해 터미널을 얻으려면 추가 스크립트가 필요합니다.

#!/bin/sh
"$@"
exec "$SHELL"

이전 스크립트를 다른 이름으로 저장하고 /home/user/hacky실행 가능하게 한 경우 다음을 사용하여 스크립트를 실행합니다.

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

전체 경로가 필요 /home/user/hacky하며 실행 가능해야합니다.

새 터미널 창에서 스크립트를 실행하려는 이전의 시도는 개정 # 2 에서 찾을 수 있습니다 x-terminal-emulator. 인수가 전달 될 수 있다는 것을 깨달았습니다 .


이 경우, asker가 모든 터미널에서 동일하지 않은 작업을 수행하려는 경우에는 도움이되지 않습니다.
— nickguletskii

시도 # 3 : 이것은 터미널을 열어두고 선택적 인수로 프로그램을 실행해야합니다.
— Lekensteyn 2016 년

1
나는 gnome 옵션을 사용했지만 일단 스크립트를 실행하면 주 터미널이 닫힙니다 !! .. 왜 그런지 아십니까?
— McLan

3
@ Suda.nese 즉, "터미널"이 스크립트 실행을 완료하면 더 이상 할 일이 없기 때문에 종료됩니다. 명령 ( bash)을 실행 하거나 같은 줄을 가질 수있는 쉘을 호출하여이를 "수정"할 수 있습니다 read -p "Press Return to continue".
— Lekensteyn

1
터미널에서 둘 이상의 명령을 어떻게 실행할 수 있습니까? 예를 들면 cd xxx && start.sh. 해석기는 &&를 명령의 두 번째 부분 (논리적)으로 본다. 그러나 내가 인용하면, 모든 것을 하나의 큰 논쟁으로 실행하려고한다
— Richard

9

아주 간단하게

#!/bin/bash

/etc/init.d/ccpd status

이것은 터미널에 아무것도 표시 할 필요가없는 다른 명령에 충분합니다. 그러나 여기에 상태가 표시되어야합니다.
따라서 터미널 창에서 실행 해야합니다.

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

다른 포스트 목적은 []자리 표시 할 수

여기서 "NAMEOFTHEPROFILE"은 "명령이 종료 될 때 터미널을 보유"하는 프로파일의 이름으로 대체됩니다.

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


1
@cipricus 나는 생각 []했다 단지 자리를
— KARTHIK T

알았다. 그러나 터미널을 너무 빨리 닫지 않도록해야합니다. 나는 그것이 또한 연결된 질문에 있다고 생각한다

@cipricus 당신은 프로필 하나를 시도 했습니까? --window-with-profile=NAMEOFTHEPROFILE내가 준 것에 추가하면 됩니다
— Karthik T

1
@cipricus 더 나은 지침을 제공하기 위해 집으로 돌아 가야하지만 아이디어는 해당 옵션 세트로 특수 프로파일을 작성하고 위의 특수 프로파일 이름을 사용하는 것입니다.
— Karthik T

2
@cipricus면 충분하다면 괜찮습니다. 프로필은 설정 그룹에 지나지 않습니다. 스크립트에서만 사용하도록 설정을 설정할 수 있으며 모든 터미널에서 사용할 필요는 없습니다. 당신은 당신이 가지고있는 모든 프로파일을 볼 수있는 편집-> 프로파일을 볼 수 있으며, 당신이 링크 한 게시물에 설명 된 설정을 추가 할 수 있습니다
— Karthik T

5

@nickguletskii의 답변 과 그의 답변 아래 내 자신의 의견에 도움이되고 @grabantot의 의견에 대한 찬성에서 영감을 얻었습니다. 특히 터미널을 열어두고 수동으로 사용할 수 있도록 할 때 특히 선호하는 방법입니다.

전의. 사용법 :이 스크립트는 시작 프로그램에 추가하여이 스크립트를 실행하고 터미널을 열고 터미널에서 탭을 만들고 이름을 지정한 다음 명령을 실행하는 데 매우 유용합니다. 또는이 스크립트에 대한 심볼릭 링크를 데스크탑에 추가 할 수 있습니다. 이 유형의 접근 방식을 사용하여 바탕 화면에서 단일 아이콘을 두 번 클릭하고 여러 터미널 (내가 수행 할 작업에 따라 다양한 탭이 있음) 및 설정할 프로그램을 열 수 있습니다. 예를 들어 일상적인 작업을위한 프로그래밍 환경.

다음은 하나의 탭을 열고 제목을 "test"로 한 다음 간단한 명령을 실행하는 고안된 예 cd /etc; ls입니다. 마지막 $SHELL부분은 쉘이 열린 상태를 유지하도록하여 출력을보고 계속 사용할 수 있습니다 (스택 오버플로에서 다른 곳에서 이것을 배웠습니다).

gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"

다음은 동일한 그놈 터미널에서 3 개의 개별 탭을 여는보다 복잡한 예입니다. 이것은 바로 데스크탑 바로 가기가 수행하는 작업 유형이므로 한 번에 여러 프로그래밍 창을 열 수 있습니다.

gnome-terminal --tab --title="tab 1" --command="bash -c 'cd /etc; ls; $SHELL'" --tab --title="tab 2" --command="bash -c 'cd ~; ls; $SHELL'" --tab --title="tab 3" --command="bash -c 'cd ~/temp3; ls; $SHELL'"

위의 명령에 대한 분석은 다음과 같습니다.

  • gnome-terminal = 그놈 터미널을 엽니 다
  • --tab = 다음에 오는 것에 대한 고유 한 탭을 엽니 다
  • --title="tab 1" =이 탭의 제목을 "탭 1"
  • --command="bash -c 'cd /etc; ls; $SHELL'"= bash -c 'cd /etc; ls; $SHELL'예를 들어 방금 만든 명령 인 명령을 실행합니다 . 그것이하는 일은 다음과 같습니다.
    • bash -c 그것은 bash 'c'ommand라고 말합니다.
    • cd /etc = 'c'hange'd' irectory를 "/ etc"경로에
    • ls = 'l' i는이 디렉토리의 내용이 아닙니다
    • $SHELL=이 비밀스러운 tidbit는 쉘을 열어 놓아 작업 할 수 있도록하는 데 필요합니다. 쉘을 열려면 명령을 실행 한 다음 닫고 간단히이 부분을 제거하십시오. 그러나 프로그래밍 마법을 만들 수 있도록 탭을 열어두기를 원합니다. :)
  • 그런 다음 --tab부품 에서 다시 시작 하여 탭 2를 생성 한 다음 다시 탭 3을 생성합니다. 마음의 내용에 맞게 사용자 정의하십시오.

스크린 샷 :

여기에 이미지 설명을 입력하십시오


1
도움이 되었기 때문에 기뻤습니다) 또한 클릭하여 프로젝트 작업을 시작할 수있는 스크립트도 있습니다. 여기에는 두 가지 문제가 있습니다. 예를 들어, 많은 터미널 창 (전체 화면이 별도로 있음)과 서버 충돌 후 창이 닫힙니다. 이 답변은 --tab + $ SHELL의 두 가지 문제를 모두 해결합니다. 니스
— grabantot

1

Lekensteyn의 답변에 대한 논평. 나는 이것이 오래된 게시물이라는 것을 알고 있지만, (이 방금했던 것처럼)이 유용한 것을 발견 한 사람은 당신이 호출하는 스크립트 안에 함수를 넣어 다른 "해키 스크립트"를 만드는 대신

hacky_function()
{
"$@"
exec "$SHELL"
}

"x-terminal-emulator -e / path / to / script hacky_function optional arguments here"를 사용하여 스크립트를 호출하십시오.

스크립트 끝에 "$ @"를 넣는 것을 잊지 마십시오


-2

screen 명령을 사용 하고 -d 기존 화면 세션에서 분리 한 후 여기에 다시 연결하십시오. -m 새 화면 세션을 강제 실행하십시오. -S 기본 이름 대신 이름 지정된 세션을 작성하십시오.


이 답변은 전혀 명확하지 않습니다.보다 이해하기 쉽도록주의하십시오
— azerafati

실제로 @azerafati, 화면은 터미널 창을 열지 않습니다 ... 심지어 멋진 패키지에 의해 의도되지 않습니다 ...
— erm3nda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.