여러 탭이있는 터미널을 열고 응용 프로그램을 실행하십시오.


16

나는 리눅스 쉘 스크립팅을 처음 사용합니다. 여러 탭으로 터미널을 여는 쉘 스크립트를 작성하고 싶습니다. 각 탭에서 rtsp 클라이언트 앱을 실행해야합니다.

이를 위해이 포럼에서 여기에 대한 질문을했으며 벨로우즈와 같은 코드를 작성하려고했습니다.

tab="--tab-with-profile=Default -e "
cmd="java RunRTSPClient"
for i in 1 2 3 4 5
   do
#   
   foo="$foo $tab $cmd"         
   done
gnome-terminal $foo
exit 0

이것은 실행 중이며 탭이있는 터미널 창을 열지 만 갑자기 닫힙니다. 오류가 발생하지 않습니다.

답변:


13

이 스크립트 변형을 사용하여 원하는 작업을 수행하십시오.

#!/bin/bash

tab="--tab-with-profile=Default"
cmd="bash -c 'java RunRTSPClient';bash"
foo=""

for i in 1 2 3 4 5; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

일반적으로 다음과 같은 스크립트가 있습니다.

#!/bin/bash

tab="--tab"
cmd="bash -c '<command-line_or_script>';bash"
foo=""

for i in 1 2 ... n; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

<command-line_or_script>각 탭에서 n 개의 탭이 실행되는 새 터미널이 열립니다 . 예를 들어 특정 경로에 인터프리터가있는 일부 탭이있는 터미널을 열 때 ( cd /path위 스크립트에서 사용) 매우 유용합니다 .

또한, 읽기 man bash, 이 게시물이 게시물은 변경 사항을 이해합니다.

이 스크립트를 테스트했으며 작동합니다.


내가 말했듯이 그것은 단지 표시하고 닫으며 오류도 발생하지 않습니다. 이 문제를 해결하는 방법?.
user172001

이제 탭이있는 창을 표시하지만 탭에서 앱을 실행하지 않습니다. 창 디스플레이 문제를 어떻게 해결했는지 설명해 드리겠습니다.
user172001

@ user172001 이제 작동하고 있습니다. 새로운 편집 내용을 확인하십시오!
Radu Rădeanu

이것은 꽤 멋지다. +1
Nishant

1
cmd1 && cmd2여러 명령을 실행하기 위해 명령 문자열에 추가하려고했습니다 . 첫 번째 것만 실행하는 것 같습니다. 내가 잘못한 일을하고 있습니까?
byxor

7

나는 내 자신의 대답을 생각해 냈습니다. 나는 이것이 더 나은 접근법이라고 생각한다.

  1. 이해할 수 있습니다. 나는 떠들썩한 전문가도없고 설명이 무엇인지에 대한 더 많은 인기를 대답에 주어진 아니에요 ..., ${}, -e, 또는@
  2. 각 탭의 제목과 명령을 쉽게 사용자 지정할 수 있습니다
  3. 이해하기가 훨씬 쉽다고 말했습니까?

(가) 있습니다 ; $SHELL각 그놈 터미널 명령의 끝에서 터미널 창을 열어 유지하는 것이다. 그렇지 않으면 즉시 닫힙니다.

title1="tab 1"
title2="tab 2"
title3="tab 3"

cmd1="cd /etc"
cmd2="cd ~/Documents"
cmd3="cd /usr/local"

gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $SHELL'" \
               --tab --title="$title2" --command="bash -c '$cmd2; $SHELL'" \
               --tab --title="$title3" --command="bash -c '$cmd3; $SHELL'" 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.