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


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.